home *** CD-ROM | disk | FTP | other *** search
/ Games of Daze / Infomagic - Games of Daze (Summer 1995) (Disc 1 of 2).iso / x2ftp / msdos / docs / inter45b / interrup.e < prev    next >
Text File  |  1995-03-26  |  289KB  |  7,492 lines

  1. Interrupt List, part 5 of 12
  2. This compilation is Copyright (c) 1989,1990,1991,1992,1993,1994,1995 Ralf Brown
  3. --------D-2145-------------------------------
  4. INT 21 - DOS 2+ - "DUP" - DUPLICATE FILE HANDLE
  5.     AH = 45h
  6.     BX = file handle
  7. Return: CF clear if successful
  8.         AX = new handle
  9.     CF set on error
  10.         AX = error code (04h,06h) (see #0885 at AH=59h)
  11. Notes:    moving file pointer for either handle will also move it for the other,
  12.       because both will refer to the same system file table
  13.     for DOS versions prior to 3.3, file writes may be forced to disk by
  14.       duplicating the file handle and closing the duplicate
  15. SeeAlso: AH=3Dh,AH=46h
  16. --------D-2146-------------------------------
  17. INT 21 - DOS 2+ - "DUP2", "FORCEDUP" - FORCE DUPLICATE FILE HANDLE
  18.     AH = 46h
  19.     BX = file handle
  20.     CX = file handle to become duplicate of first handle
  21. Return: CF clear if successful
  22.     CF set on error
  23.         AX = error code (04h,06h) (see #0885 at AH=59h)
  24. Notes:    closes file with handle CX if it is still open
  25.     DOS 3.30 hangs if BX=CX on entry
  26.     moving file pointer for either handle will also move it for the other,
  27.       because both will refer to the same system file table
  28. SeeAlso: AH=3Dh,AH=45h
  29. --------D-2147-------------------------------
  30. INT 21 - DOS 2+ - "CWD" - GET CURRENT DIRECTORY
  31.     AH = 47h
  32.     DL = drive number (00h = default, 01h = A:, etc)
  33.     DS:SI -> 64-byte buffer for ASCIZ pathname
  34. Return: CF clear if successful
  35.         AX = 0100h (undocumented)
  36.     CF set on error
  37.         AX = error code (0Fh) (see #0885 at AH=59h)
  38. Notes:    the returned path does not include a drive or the initial backslash
  39.     many Microsoft products for Windows rely on AX being 0100h on success
  40.     under the FlashTek X-32 DOS extender, the buffer pointer is in DS:ESI
  41. SeeAlso: AH=19h,AH=3Bh,AH=71h,INT 15/AX=DE25h
  42. --------D-2148-------------------------------
  43. INT 21 - DOS 2+ - ALLOCATE MEMORY
  44.     AH = 48h
  45.     BX = number of paragraphs to allocate
  46. Return: CF clear if successful
  47.         AX = segment of allocated block
  48.     CF set on error
  49.         AX = error code (07h,08h) (see #0885 at AH=59h)
  50.         BX = size of largest available block
  51. Notes:    DOS 2.1-6.0 coalesces free blocks while scanning for a block to
  52.       allocate
  53.     .COM programs are initially allocated the largest available memory
  54.       block, and should free some memory with AH=49h before attempting any
  55.       allocations
  56.     under the FlashTek X-32 DOS extender, EBX contains a protected-mode
  57.       near pointer to the allocated block on a successful return
  58. SeeAlso: AH=49h,AH=4Ah,AH=58h,AH=83h
  59. --------D-2149-------------------------------
  60. INT 21 - DOS 2+ - FREE MEMORY
  61.     AH = 49h
  62.     ES = segment of block to free
  63. Return: CF clear if successful
  64.     CF set on error
  65.         AX = error code (07h,09h) (see #0885 at AH=59h)
  66. Notes:    apparently never returns an error 07h, despite official docs; DOS 2.1+
  67.       code contains only an error 09h exit
  68.     DOS 2.1-6.0 does not coalesce adjacent free blocks when a block is
  69.       freed, only when a block is allocated or resized
  70.     the code for this function is identical in DOS 2.1-6.0 except for
  71.       calls to start/end a critical section in DOS 3+
  72. SeeAlso: AH=48h,AH=4Ah
  73. --------D-214A-------------------------------
  74. INT 21 - DOS 2+ - RESIZE MEMORY BLOCK
  75.     AH = 4Ah
  76.     BX = new size in paragraphs
  77.     ES = segment of block to resize
  78. Return: CF clear if successful
  79.     CF set on error
  80.         AX = error code (07h,08h,09h) (see #0885 at AH=59h)
  81.         BX = maximum paragraphs available for specified memory block
  82. Notes:    under DOS 2.1-6.0, if there is insufficient memory to expand the block
  83.       as much as requested, the block will be made as large as possible
  84.     DOS 2.1-6.0 coalesces any free blocks immediately following the block
  85.       to be resized
  86. SeeAlso: AH=48h,AH=49h,AH=83h
  87. --------v-214A--BX00B6-----------------------
  88. INT 21 - VIRUS???
  89.     AH = 4Ah
  90.     BX = 00B6h
  91.     ES = CX
  92. Return: ???
  93. Note:    this call is intercepted by the Search&Destroy SDRes v27.03 bundled
  94.       with Novell DOS 7, and is presumably some virus's installation check
  95. SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=FFFFh,AH=D2h"VIRUS"
  96. --------v-214A--BXFFFF-----------------------
  97. INT 21 - VIRUS???
  98.     AH = 4Ah
  99.     BX = FFFFh
  100.     CX = 0568h
  101.     SI = 0129h
  102.     DI = 0000h
  103.     ES = BP
  104. Return: ???
  105. Note:    this call is intercepted by the Search&Destroy SDRes v27.03 bundled
  106.       with Novell DOS 7, and is presumably some virus's installation check
  107. SeeAlso: AH=0Eh/DL=ADh,AH=4Ah/BX=00B6h
  108. --------D-214B-------------------------------
  109. INT 21 - DOS 2+ - "EXEC" - LOAD AND/OR EXECUTE PROGRAM
  110.     AH = 4Bh
  111.     AL = type of load
  112.         00h load and execute
  113.         01h load but do not execute
  114.         03h load overlay (see #0804)
  115.         04h load and execute in background (European MS-DOS 4.0 only)
  116.         "Exec & Go" (see also AH=80h)
  117.     DS:DX -> ASCIZ program name (must include extension)
  118.     ES:BX -> parameter block (see #0803,#0804,#0805)
  119.     CX = mode (subfunction 04h only)
  120.         0000h child placed in zombie mode after termination
  121.         0001h child's return code discarded on termination
  122. Return: CF clear if successful
  123.         BX,DX destroyed
  124.         if subfunction 01h, process ID set to new program's PSP; get with
  125.         INT 21/AH=62h
  126.     CF set on error
  127.         AX = error code (01h,02h,05h,08h,0Ah,0Bh) (see #0885 at AH=59h)
  128. Notes:    DOS 2.x destroys all registers, including SS:SP
  129.     under ROM-based DOS, if no disk path characters (colons or slashes)
  130.       are included in the program name, the name is searched for in the
  131.       ROM module headers (see #0808) before searching on disk
  132.     for functions 00h and 01h, the calling process must ensure that there
  133.       is enough unallocated memory available; if necessary, by releasing
  134.       memory with AH=49h or AH=4Ah
  135.     for function 01h, the AX value to be passed to the child program is put
  136.       on top of the child's stack
  137.     for function 03h, DOS assumes that the overlay is being loaded into
  138.       memory allocated by the caller
  139.     function 01h was undocumented prior to the release of DOS 5.0
  140.     some versions (such as DR-DOS 6.0) check the parameters and parameter
  141.       block and return an error if an invalid value (such as an offset of
  142.       FFFFh) is found
  143.     background programs under European MS-DOS 4.0 must use the new
  144.       executable format
  145.     this function ignores the filename extension, instead checking the
  146.       first two bytes of the file to determine whether there is a valid
  147.       .EXE header (see #0807); if not, the file is assumed to be in .COM
  148.       format.  If present, the file may be in any of several formats which
  149.       are extensions of the original .EXE format (see #0806)
  150.     .COM-format executables begin running with the following register
  151.       values:
  152.         AL = 00h if first FCB has valid drive letter, FFh if not
  153.         AH = 00h if second FCB has valid drive letter, FFh if not
  154.         CS,DS,ES,SS = PSP segment
  155.         SP = offset of last word available in first 64K segment
  156.         (note: AX is always 0000h under DESQview)
  157.     old-format executables begin running with the following register
  158.       values:
  159.         AL = 00h if first FCB has valid drive letter, FFh if not
  160.         AH = 00h if second FCB has valid drive letter, FFh if not
  161.         DS,ES = PSP segment
  162.         SS:SP as defined in .EXE header
  163.         (note: AX is always 0000h under DESQview)
  164.     new executables begin running with the following register values
  165.         AX = environment segment
  166.         BX = offset of command tail in environment segment
  167.         CX = size of automatic data segment (0000h = 64K)
  168.         ES,BP = 0000h
  169.         DS = automatic data segment
  170.         SS:SP = initial stack
  171.       the command tail corresponds to an old executable's PSP:0081h and
  172.       following, except that the 0Dh is turned into a NUL (00h); new
  173.       format executables have no PSP
  174.     under the FlashTek X-32 DOS extender, only function 00h is supported
  175.       and the pointers are passed in DS:EDX and ES:EBX
  176.     DR-DOS 6 always loads .EXE-format programs with no fixups and 
  177.       .COM-format programs starting with 9Ch 55h (PUSHF/PUSH BP) above the
  178.       64K mark to avoid the EXEPACK bug, by extending the memory block
  179.       containing the program's environment; this code is disabled if the
  180.       name of the parent program as stored in the MCB is 'WIN'.
  181. BUGS:    DOS 2.00 assumes that DS points at the current program's PSP
  182.     Load Overlay (subfunction 03h) loads up to 512 bytes too many if the
  183.       file contains additional data after the actual overlay
  184. SeeAlso: AX=4B05h,AH=4Ch,AH=4Dh,AH=64h"OS/2",AH=8Ah,INT 2E,INT 60/DI=0604h
  185.  
  186. Format of EXEC parameter block for AL=00h,01h,04h:
  187. Offset    Size    Description    (Table 0803)
  188.  00h    WORD    segment of environment to copy for child process (copy caller's
  189.           environment if 0000h)
  190.  02h    DWORD    pointer to command tail to be copied into child's PSP
  191.  06h    DWORD    pointer to first FCB to be copied into child's PSP
  192.  0Ah    DWORD    pointer to second FCB to be copied into child's PSP
  193.  0Eh    DWORD    (AL=01h) will hold subprogram's initial SS:SP on return
  194.  12h    DWORD    (AL=01h) will hold entry point (CS:IP) on return
  195. SeeAlso: #0804,#0805
  196.  
  197. Format of EXEC parameter block for AL=03h:
  198. Offset    Size    Description    (Table 0804)
  199.  00h    WORD    segment at which to load overlay
  200.  02h    WORD    relocation factor to apply to overlay if in .EXE format
  201. SeeAlso: #0803,#0805
  202.  
  203. Format of EXEC parameter block for FlashTek X-32:
  204. Offset    Size    Description    (Table 0805)
  205.  00h    PWORD    48-bit far pointer to environment string
  206.  06h    PWORD    48-bit far pointer to command tail string
  207. SeeAlso: #0803,#0804
  208.  
  209. (Table 0806)
  210. Values for the executable types understood by various environments:
  211.  MZ    old-style DOS executable (see #0807)
  212.  NE    Windows or OS/2 1.x segmented ("new") executable (see #0809)
  213.  LE    Windows virtual device driver (VxD) linear executable (see #0822)
  214.  LX    variant of LE used in OS/2 2.x (see #0822)
  215.  W3    Windows WIN386.EXE file; a collection of LE files
  216.  PE    Win32 (Windows NT and Win32s) portable executable based on Unix COFF
  217.  DL    HP 100LX/200LX system manager compliant executable (.EXM)
  218.  MP    old PharLap .EXP (see #0832)
  219.  P2    PharLap 286 .EXP (see #0833)
  220.  P3    PharLap 386 .EXP (see #0833)
  221.  
  222. Format of .EXE file header:
  223. Offset    Size    Description    (Table 0807)
  224.  00h  2 BYTEs    .EXE signature, either "MZ" or "ZM" (5A4Dh or 4D5Ah)
  225.           (see also #0806)
  226.  02h    WORD    number of bytes in last 512-byte page of executable
  227.  04h    WORD    total number of 512-byte pages in executable (includes any
  228.         partial last page)
  229.  06h    WORD    number of relocation entries
  230.  08h    WORD    header size in paragraphs
  231.  0Ah    WORD    minimum paragraphs of memory to allocation in addition to
  232.         executable's size
  233.  0Ch    WORD    maximum paragraphs to allocate in addition to executable's size
  234.  0Eh    WORD    initial SS relative to start of executable
  235.  10h    WORD    initial SP
  236.  12h    WORD    checksum (one's complement of sum of all words in executable)
  237.  14h    DWORD    initial CS:IP relative to start of executable
  238.  18h    WORD    offset within header of relocation table
  239.         40h or greater for new-format (NE,LE,LX,W3,PE,etc.) executable
  240.  1Ah    WORD    overlay number (normally 0000h = main program)
  241. ---new executable---
  242.  1Ch  4 BYTEs    ???
  243.  20h    WORD    behavior bits
  244.  22h 26 BYTEs    reserved for additional behavior info
  245.  3Ch    DWORD    offset of new executable (NE,LE,etc) header within disk file,
  246.         or 00000000h if plain MZ executable
  247. ---Borland TLINK---
  248.  1Ch  2 BYTEs    ??? (apparently always 01h 00h)
  249.  1Eh    BYTE    signature FBh
  250.  1Fh    BYTE    TLINK version (major in high nybble, minor in low nybble)
  251.  20h  2 BYTEs    ??? (v2.0 apparently always 72h 6Ah, v3.0+ seems always 6Ah 72h)
  252. ---ARJ self-extracting archive---
  253.  1Ch  4 BYTEs    signature "RJSX" (older versions, new signature is "aRJsfX" in
  254.         the first 1000 bytes of the file)
  255. ---LZEXE 0.90 compressed executable---
  256.  1Ch  4 BYTEs    signature "LZ09"
  257. ---LZEXE 0.91 compressed executable---
  258.  1Ch  4 BYTEs    signature "LZ91"
  259. ---PKLITE compressed executable---
  260.  1Ch    BYTE    minor version number
  261.  1Dh    BYTE    bits 0-3: major version
  262.         bit 4: extra compression
  263.         bit 5: huge (multi-segment) file
  264.  1Eh  6 BYTEs    signature "PKLITE" (followed by copyright message)
  265. ---LHarc 1.x self-extracting archive---
  266.  1Ch  4 BYTEs    unused???
  267.  20h  3 BYTEs    jump to start of extraction code
  268.  23h  2 BYTEs    ???
  269.  25h 12 BYTEs    signature "LHarc's SFX "
  270. ---LHA 2.x self-extracting archive---
  271.  1Ch  8 BYTEs    ???
  272.  24h 10 BYTEs    signature "LHa's SFX " (v2.10) or "LHA's SFX " (v2.13)
  273. ---TopSpeed C 3.0 CRUNCH compressed file---
  274.  1Ch    DWORD    018A0001h
  275.  20h    WORD    1565h
  276. ---PKARCK 3.5 self-extracting archive---
  277.  1Ch    DWORD    00020001h
  278.  20h    WORD    0700h
  279. ---BSA (Soviet archiver) self-extracting archive---
  280.  1Ch    WORD    000Fh
  281.  1Eh    BYTE    A7h
  282. ---LARC self-extracting archive---
  283.  1Ch  4 BYTEs    ???
  284.  20h 11 BYTEs    "SFX by LARC "
  285. ---LH self-extracting archive---
  286.  1Ch  8 BYTEs    ???
  287.  24h  8 BYTEs    "LH's SFX "
  288. ---other linkers---
  289.  1Ch    var    optional information
  290. ---
  291.   N   N DWORDs    relocation items
  292. Notes:    if word at offset 02h is 4, it should be treated as 00h, since pre-1.10
  293.       versions of the MS linker set it that way
  294.     if both minimum and maximum allocation (offset 0Ah/0Ch) are zero, the
  295.       program is loaded as high in memory as possible (DOS only checks
  296.       the maximum allocation, however)
  297.     the maximum allocation is set to FFFFh by default
  298.     additional data may be contained in the file beyond the end of the
  299.       load image described by the .EXE header; this data may be overlays,
  300.       the actual executable for newer-format executables, or debugging
  301.       information (see #0813,#0837)
  302.  
  303. Format of ROM Module Header:
  304. Offset    Size    Description    (Table 0808)
  305.  00h  2 BYTEs    ROM signature 55h, AAh
  306.  02h    BYTE    size of ROM in 512-byte blocks
  307.  03h  3 BYTEs    POST initialization entry point (near JMP instruction)
  308.  06h    ROM Program Name List [array]
  309.     Offset    Size    Description
  310.      00h    BYTE    length of ROM program's name (00h if end of name list)
  311.      01h  N BYTEs    program name
  312.      N+1  3 BYTEs    program entry point (near JMP instruction)
  313.  
  314. Format of new executable header:
  315. Offset    Size    Description    (Table 0809)
  316.  00h  2 BYTEs    "NE" (4Eh 45h) signature
  317.  02h  2 BYTEs    linker version (major, then minor)
  318.  04h    WORD    offset from start of this header to entry table (see #0816)
  319.  06h    WORD    length of entry table in bytes
  320.  08h    DWORD    file load CRC (0 in Borland's TPW)
  321.  0Ch    BYTE    program flags (see #0810)
  322.  0Dh    BYTE    application flags (see #0811)
  323.  0Eh    WORD    auto data segment index
  324.  10h    WORD    initial local heap size
  325.  12h    WORD    initial stack size (added to data seg, 0000h if SS <> DS)
  326.  14h    DWORD    program entry point (CS:IP), "CS" is index into segment table
  327.  18h    DWORD    initial stack pointer (SS:SP), "SS" is segment index
  328.         if SS=automatic data segment and SP=0000h, the stack pointer is
  329.           set to the top of the automatic data segment, just below the
  330.           local heap
  331.  1Ch    WORD    segment count
  332.  1Eh    WORD    module reference count
  333.  20h    WORD    length of nonresident names table in bytes
  334.  22h    WORD    offset from start of this header to segment table (see #0814)
  335.  24h    WORD    offset from start of this header to resource table
  336.  26h    WORD    offset from start of this header to resident names table
  337.  28h    WORD    offset from start of this header to module reference table
  338.  2Ah    WORD    offset from start of this header to imported names table
  339.         (array of counted strings, terminated with a string of length
  340.           00h)
  341.  2Ch    DWORD    offset from start of file to nonresident names table
  342.  30h    WORD    count of moveable entry point listed in entry table
  343.  32h    WORD    file alignment size shift count
  344.         0 is equivalent to 9 (default 512-byte pages)
  345.  34h    WORD    number of resource table entries
  346.  36h    BYTE    target operating system
  347.         00h unknown
  348.         01h OS/2
  349.         02h Windows
  350.         03h European MS-DOS 4.x
  351.         04h Windows 386
  352.         05h BOSS (Borland Operating System Services)
  353.         81h PharLap 286|DOS-Extender, OS/2
  354.         82h PharLap 286|DOS-Extender, Windows
  355.  37h    BYTE    other EXE flags (see #0812)
  356.  38h    WORD    offset to return thunks or start of gangload area
  357.  3Ah    WORD    offset to segment reference thunks or length of gangload area
  358.  3Ch    WORD    minimum code swap area size
  359.  3Eh  2 BYTEs    expected Windows version (minor version first)
  360. Note:    this header is documented in detail in the Windows 3.1 SDK Programmer's
  361.       Reference, Vol 4.
  362.  
  363. Bitfields for new executable program flags:
  364. Bit(s)    Description    (Table 0810)
  365.  0-1    DGROUP type
  366.       0 = none
  367.       1 = single shared
  368.       2 = multiple (unshared)
  369.       3 = (null)
  370.  2    global initialization
  371.  3    protected mode only
  372.  4    8086 instructions
  373.  5    80286 instructions
  374.  6    80386 instructions
  375.  7    80x87 instructions
  376.  
  377. Bitfields for new executable application flags:
  378. Bit(s)    Description    (Table 0811)
  379.  0-2    application type
  380.     001 full screen (not aware of Windows/P.M. API)
  381.     010 compatible with Windows/P.M. API
  382.     011 uses Windows/P.M. API
  383.  3    is a Family Application (OS/2)
  384.  5    0=executable, 1=errors in image
  385.  6    non-conforming program (valid stack is not maintained)
  386.  7    DLL or driver rather than application
  387.     (SS:SP info invalid, CS:IP points at FAR init routine called with
  388.       AX=module handle which returns AX=0000h on failure, AX nonzero on
  389.       successful initialization)
  390.  
  391. Bitfields for other new .EXE flags:
  392. Bit(s)    Description    (Table 0812)
  393.  0    supports long filenames
  394.  1    2.X protected mode
  395.  2    2.X proportional font
  396.  3    gangload area
  397.  
  398. Format of Codeview trailer (at end of executable):
  399. Offset    Size    Description    (Table 0813)
  400.  00h    WORD    signature 4E42h ('NB')
  401.  02h    WORD    Microsoft debug info version number
  402.  04h    DWORD    Codeview header offset
  403. SeeAlso: #0837
  404.  
  405. Format of new executable segment table record:
  406. Offset    Size    Description    (Table 0814)
  407.  00h    WORD    offset in file (shift left by alignment shift to get byte offs)
  408.  02h    WORD    length of image in file (0000h = 64K)
  409.  04h    WORD    segment attributes (see #0815)
  410.  06h    WORD    number of bytes to allocate for segment (0000h = 64K)
  411. Note:    the first segment table entry is entry number 1
  412. SeeAlso: #0817
  413.  
  414. Bitfields for segment attributes:
  415. Bit(s)    Description    (Table 0815)
  416.  0    data segment rather than code segment
  417.  1    unused???
  418.  2    real mode
  419.  3    iterated
  420.  4    movable
  421.  5    sharable
  422.  6    preloaded rather than demand-loaded
  423.  7    execute-only (code) or read-only (data)
  424.  8    relocations (directly following code for this segment)
  425.  9    debug info present
  426.  10,11    80286 DPL bits
  427.  12    discardable
  428.  13-15    discard priority
  429.  
  430. Format of new executable entry table item (list):
  431. Offset    Size    Description    (Table 0816)
  432.  00h    BYTE    number of entry points (00h if end of entry table list)
  433.  01h    BYTE    segment number (00h if end of entry table list)
  434.  02h 3N BYTEs    entry records
  435.         Offset    Size    Description
  436.          00h    BYTE    flags
  437.                 bit 0: exported
  438.                 bit 1: single data
  439.                 bits 2-7: unused???
  440.          01h    WORD    offset within segment
  441.  
  442. Format of new executable relocation data (immediately follows segment image):
  443. Offset    Size    Description    (Table 0817)
  444.  00h    WORD    number of relocation items
  445.  02h 8N BYTEs    relocation items
  446.         Offset    Size    Description
  447.          00h    BYTE    relocation type
  448.                 00h LOBYTE
  449.                 02h BASE
  450.                 03h PTR
  451.                 05h OFFS
  452.                 0Bh PTR48
  453.                 0Dh OFFS32
  454.          01h    BYTE    flags
  455.                 bit 2: additive
  456.          02h    WORD    offset within segment
  457.          04h    WORD    target address segment
  458.          06h    WORD    target address offset
  459. SeeAlso: #0814,#0818
  460.  
  461. Format of new executable resource data:
  462. Offset    Size    Description    (Table 0818)
  463.  00h    WORD    alignment shift count for resource data
  464.  02h  N RECORDs resources
  465.     Format of resource record:
  466.     Offset    Size    Description
  467.      00h    WORD    type ID
  468.             0000h if end of resource records
  469.             >= 8000h if integer type
  470.             else offset from start of resource table to type string
  471.      02h    WORD    number of resources of this type
  472.      04h    DWORD    reserved for runtime use
  473.      08h  N Resources (see #0819)
  474. Note:    resource type and name strings are stored immediately following the
  475.       resource table, and are not null-terminated
  476. SeeAlso: #0819
  477.  
  478. Format of new executable resource entry:
  479. Offset    Size    Description    (Table 0819)
  480.  00h    WORD    offset in alignment units from start of file to contents of
  481.         the resource data
  482.  02h    WORD    length of resource image in bytes
  483.  04h    WORD    flags
  484.         bit 4: moveable
  485.         bit 5: shareable
  486.         bit 6: preloaded
  487.  06h    WORD    resource ID
  488.         >= 8000h if integer resource
  489.         else offset from start of resource table to resource string
  490.  08h    DWORD    reserved for runtime use
  491. Notes:    resource type and name strings are stored immediately following the
  492.       resource table, and are not null-terminated
  493.     strings are counted strings, with a string of length 0 indicating the
  494.       end of the resource table
  495. SeeAlso: #0818,#0820
  496.  
  497. Format of new executable module reference table [one bundle of entries]:
  498. Offset    Size    Description    (Table 0820)
  499.  00h    BYTE    number of records in this bundle (00h if end of table)
  500.  01h    BYTE    segment indicator
  501.         00h unused
  502.         FFh movable segment, segment number is in entry
  503.         else segment number of fixed segment
  504.  02h  N RECORDs
  505.     Format of segment record
  506.     Offset    Size    Description
  507.      00h    BYTE    flags
  508.             bit 0: entry is exported
  509.             bit 1: entry uses global (shared) data
  510.             bits 7-3: number of parameter words
  511.     ---fixed segment---
  512.      01h    WORD    offset
  513.     ---moveable segment---
  514.      01h  2 BYTEs    INT 3F instruction (CDh 3Fh)
  515.      03h    BYTE    segment number
  516.      05h    WORD    offset
  517. Note:    table entries are numbered starting from 1
  518. SeeAlso: #0821
  519.  
  520. Format of new executable resident/nonresident name table entry:
  521. Offset    Size    Description    (Table 0821)
  522.  00h    BYTE    length of string (00h if end of table)
  523.  01h  N BYTEs    ASCII text of string
  524.  N+1    WORD    ordinal number (index into entry table)
  525. Notes:    the first string in the resident name table is the module name; the
  526.       first entry in the nonresident name table is the module description
  527.     the strings are case-sensitive; if the executable was linked with
  528.       /IGNORECASE, all strings are in uppercase
  529. SeeAlso: #0820
  530.  
  531. Format of Linear Executable (enhanced mode executable) header:
  532. Offset    Size    Description    (Table 0822)
  533.  00h  2 BYTEs    "LE" (4Ch 45h) signature (Windows)
  534.         "LX" (4Ch 58h) signature (OS/2)
  535.  02h    BYTE    byte order (00h = little-endian, nonzero = big-endian)
  536.  03h    BYTE    word order (00h = little-endian, nonzero = big-endian)
  537.  04h    DWORD    executable format level
  538.  08h    WORD    CPU type (see also INT 15/AH=C9h)
  539.         01h Intel 80286 or upwardly compatible
  540.         02h Intel 80386 or upwardly compatible
  541.         03h Intel 80486 or upwardly compatible
  542.         04h Intel Pentium (80586) or upwardly compatible
  543.         20h Intel i860 (N10) or compatible
  544.         21h Intel "N11" or compatible
  545.         40h MIPS Mark I (R2000, R3000) or compatible
  546.         41h MIPS Mark II (R6000) or compatible
  547.         42h MIPS Mark III (R4000) or compatible
  548.  0Ah    WORD    target operating system
  549.         01h OS/2
  550.         02h Windows
  551.         03h European DOS 4.0
  552.         04h Windows 386
  553.  0Ch    DWORD    module version
  554.  10h    DWORD    module type (see #0823)
  555.  14h    DWORD    number of memory pages
  556.  18h    Initial CS:EIP
  557.     DWORD    object number
  558.     DWORD    offset
  559.  20h    Initial SS:ESP
  560.     DWORD    object number
  561.     DWORD    offset
  562.  28h    DWORD    memory page size
  563.  2Ch    DWORD    (Windows LE) bytes on last page
  564.         (OS/2 LX) page offset shift count
  565.  30h    DWORD    fixup section size
  566.  34h    DWORD    fixup section checksum
  567.  38h    DWORD    loader section size
  568.  3Ch    DWORD    loader section checksum
  569.  40h    DWORD    offset of object table (see #0824)
  570.  44h    DWORD    object table entries
  571.  48h    DWORD    object page map table offset (see #0826)
  572.  4Ch    DWORD    object iterate data map offset
  573.  50h    DWORD    resource table offset
  574.  54h    DWORD    resource table entries
  575.  58h    DWORD    resident names table offset (see #0827)
  576.  5Ch    DWORD    entry table offset (see #0828,#0829)
  577.  60h    DWORD    module directives table offset
  578.  64h    DWORD    Module Directives entries
  579.  68h    DWORD    Fixup page table offset
  580.  6Ch    DWORD    Fixup record table offset (see #0831)
  581.  70h    DWORD    imported modules name table offset
  582.  74h    DWORD    imported modules count
  583.  78h    DWORD    imported procedures name table offset
  584.  7Ch    DWORD    per-page checksum table offset
  585.  80h    DWORD    data pages offset
  586.  84h    DWORD    preload page count
  587.  88h    DWORD    non-resident names table offset
  588.  8Ch    DWORD    non-resident names table length
  589.  90h    DWORD    non-resident names checksum
  590.  94h    DWORD    automatic data object
  591.  98h    DWORD    debug information offset
  592.  9Ch    DWORD    debug information length
  593.  A0h    DWORD    preload instance pages number
  594.  A4h    DWORD    demand instance pages number
  595.  A8h    DWORD    extra heap allocation
  596.  ACh 12 BYTEs    reserved
  597.  B8h    DWORD    offset of VERSIONINFO resource (MS-Windows VxD only)
  598.  BCh    DWORD    pointer to ??? (dynamically-loadable VxDs only???)
  599.  C0h    WORD    device ID (MS-Windows VxD only)
  600.  C2h    WORD    DDK version (MS-Windows VxD only)
  601. Note:    used by EMM386.EXE, QEMM, and Windows 3.0 Enhanced Mode drivers
  602.  
  603. Bitfields for Linear Executable module type:
  604. Bit(s)    Description    (Table 0823)
  605.  2    initialization (only for DLLs) 0 = global, 1 = per-process
  606.  4    no internal fixups in executable image
  607.  5    no external fixups in executable image
  608.  8-10    API compatibility
  609.     0 = unknown
  610.     1 = incompatible with PM windowing \
  611.     2 = compatible with PM windowing    > (only for
  612.     3 = uses PM windowing API       /    programs)
  613.  13    module not loadable (only for programs)
  614.  15-17    module type
  615.     000 program
  616.     001 library (DLL)
  617.     011 protected memory library module
  618.     100 physical device driver
  619.     110 virtual device driver
  620.  30    per-process library termination
  621.     (requires valid CS:EIP, can't be set for .EXE)
  622.  
  623. Format of object table entry:
  624. Offset    Size    Description    (Table 0824)
  625.  00h    DWORD    virtual size in bytes
  626.  04h    DWORD    relocation base address
  627.  08h    DWORD    object flags (see #0825)
  628.  0Ch    DWORD    page map index
  629.  10h    DWORD    page map entries (see #0826)
  630.  14h  4 BYTEs    reserved??? (apparently always zeros)
  631.  
  632. Bitfields for object flags:
  633. Bit(s)    Description    (Table 0825)
  634.  0    readable
  635.  1    writable
  636.  2    executable
  637.  3    resource
  638.  4    discardable
  639.  5    shared
  640.  6    preloaded
  641.  7    invalid
  642.  8-9    type
  643.     00 normal
  644.     01 zero-filled
  645.     10 resident
  646.     11 resident and contiguous
  647.  10    resident and long-lockable
  648.  11    reserved
  649.  12    16:16 alias required
  650.  13    "BIG" (Huge: 32-bit)
  651.  14    conforming
  652.  15    "OBJECT_I/O_PRIVILEGE_LEVEL"
  653.  16-31    reserved
  654.  
  655. Format of object page map table entry:
  656. Offset    Size    Description    (Table 0826)
  657.  00h    BYTE    ??? (usually 00h)
  658.  01h    WORD    (big-endian) index to fixup table
  659.         0000h if no relocation info
  660.  03h    BYTE    type (00h hard copy in file, 03h some relocation needed)
  661.  
  662. Format of resident names table entry:
  663. Offset    Size    Description    (Table 0827)
  664.  00h    BYTE    length of name
  665.  01h  N BYTEs    name
  666.  N+1  3 BYTEs    ???
  667.  
  668. Format of LE linear executable entry table:
  669. Offset    Size    Description    (Table 0828)
  670.  00h    BYTE    number of entries in table
  671.  01h 10 BYTEs per entry
  672.         Offset    Size    Description
  673.          00h    BYTE    bit flags
  674.                 bit 0: non-empty bundle
  675.                 bit 1: 32-bit entry
  676.          01h    WORD    object number
  677.          03h    BYTE    entry type flags
  678.                 bit 0: exported
  679.                 bit 1: uses single data rather than instance
  680.                 bit 2: reserved
  681.                 bits 3-7: number of stack parameters
  682.          04h    DWORD    offset of entry point
  683.          08h  2 BYTEs    ???
  684. Note:    empty bundles (bit flags at 00h = 00h) are used to skip unused indices,
  685.       and do not contain the remaining nine bytes
  686.  
  687. Format of LX linear executable entry table [array]:
  688. Offset    Size    Description    (Table 0829)
  689.  00h    BYTE    number of bundles following (00h = end of entry table)
  690.  01h    BYTE    bundle type
  691.         00h empty
  692.         01h 16-bit entry
  693.         02h 286 callgate entry
  694.         03h 32-bit entry
  695.         04h forwarder entry
  696.         bit 7 set if additional parameter typing information is present
  697. ---bundle type 00h---
  698.  no additional fields
  699. ---bundle type 01h---
  700.  02h    WORD    object number
  701.  04h    BYTE    entry flags
  702.         bit 0: exported
  703.         bits 7-3: number of stack parameters
  704.  05h    WORD    offset of entry point in object (shifted by page size shift)
  705. ---bundle type 02h---
  706.  02h    WORD    object number
  707.  04h    BYTE    entry flags
  708.         bit 0: exported
  709.         bits 7-3: number of stack parameters
  710.  05h    WORD    offset of entry point in object
  711.  07h    WORD    reserved for callgate selector (used by loader)
  712. ---bundle type 03h---
  713.  02h    WORD    object number
  714.  04h    BYTE    entry flags
  715.         bit 0: exported
  716.         bits 7-3: number of stack parameters
  717.  05h    DWORD    offset of entry point in object
  718. ---bundle type 04h---
  719.  02h    WORD    reserved
  720.  04h    BYTE    forwarder flags
  721.         bit 0: import by ordinal
  722.         bits 7-1 reserved
  723.  05h    WORD    module ordinal
  724.         (forwarder's index into Import Module Name table)
  725.  07h    DWORD    procedure name offset or import ordinal number
  726. Note:    all fields after the first two bytes are repeated N times
  727.  
  728. Bitfields for linear executable fixup type:
  729. Bit(s)    Description    (Table 0830)
  730.  7    ordinal is BYTE rather than WORD
  731.  6    16-rather than 8-object number/module ordinal
  732.  5    addition with DWORD rather than WORD
  733.  4    relocation info has size with new two bytes at end
  734.  3    reserved (0)
  735.  2    set if add to destination, clear to replace destination
  736.  1-0    type
  737.     00 internal fixup
  738.     01 external fixup, imported by ordinal
  739.     10 external fixup, imported by name
  740.     11 internal fixup via entry table
  741.  
  742. Format of linear executable fixup record:
  743. Offset    Size    Description    (Table 0831)
  744.  00h    BYTE    type
  745.         bits 7-4: modifier (0001 single, 0011 multiple)
  746.         bits 3-0: type
  747.             0000 byte offset
  748.             0010 word segment
  749.             0011 16-bit far pointer (DWORD)
  750.             0101 16-bit offset
  751.             0110 32-bit far pointer (PWORD)
  752.             0111 32-bit offset
  753.             1000 near call or jump, WORD/DWORD based on seg attrib
  754.  01h    BYTE    linear executable fixup type (see #0830)
  755. ---if single type---
  756.  02h    WORD    offset within page
  757.  04h    relocation information
  758.     ---internal fixup---
  759.     BYTE    object number
  760.     ---external,ordinal---
  761.     BYTE    one-based module number in Import Module table
  762.     BYTE/WORD ordinal number
  763.     WORD/DWORD value to add (only present if modifier bit 4 set)
  764.     ---external,name---
  765.     BYTE    one-based module number in Import Module table
  766.     WORD    offset in Import Procedure names
  767.     WORD/DWORD value to add (only present if modifier bit 4 set)
  768. ---if multiple type---
  769.  02h    BYTE    number of items
  770.  03h    var    relocation info as for "single" type (see above)
  771.       N WORDs    offsets of items to relocate
  772.  
  773. Format of old Phar Lap .EXP file header:
  774. Offset    Size    Description    (Table 0832)
  775.  00h  2 BYTEs    "MP" (4Dh 50h) signature
  776.  02h    WORD    remainder of image size / page size (page size = 512h)
  777.  04h    WORD    size of image in pages
  778.  06h    WORD    number of relocation items
  779.  08h    WORD    header size in paragraphs
  780.  0Ah    WORD    minimum number of extra 4K pages to be allocated at the end
  781.           of program, when it is loaded
  782.  0Ch    WORD    maximum number of extra 4K pages to be allocated at the end
  783.           of program, when it is loaded
  784.  0Eh    DWORD    initial ESP
  785.  12h    WORD    word checksum of file
  786.  14h    DWORD    initial EIP
  787.  18h    WORD    offset of first relocation item
  788.  1Ah    WORD    overlay number
  789.  1Ch    WORD    ??? (wants to be 1)
  790. SeeAlso: #0833
  791.  
  792. Format of new Phar Lap .EXP file header:
  793. Offset    Size    Description    (Table 0833)
  794.  00h  2 BYTEs    signature ("P2" for 286 .EXP executable, "P3" for 386 .EXP)
  795.  02h    WORD    level (01h flat-model file, 02h multisegmented file)
  796.  04h    WORD    header size
  797.  06h    DWORD    file size in bytes
  798.  0Ah    WORD    checksum
  799.  0Ch    DWORD    offset of run-time parameters within file (see #0835)
  800.  10h    DWORD    size of run-time parameters in bytes
  801.  14h    DWORD    offset of relocation table within file
  802.  18h    DWORD    size of relocation table in bytes
  803.  1Ch    DWORD    offset of segment information table within file (see #0834)
  804.  20h    DWORD    size of segment information table in bytes
  805.  24h    WORD    size of segment information table entry in bytes
  806.  26h    DWORD    offset of load image within file
  807.  2Ah    DWORD    size of load image on disk
  808.  2Eh    DWORD    offset of symbol table within file
  809.  32h    DWORD    size of symbol table in bytes
  810.  36h    DWORD    offset of GDT within load image
  811.  3Ah    DWORD    size of GDT in bytes
  812.  3Eh    DWORD    offset of LDT within load image
  813.  42h    DWORD    size of LDT in bytes
  814.  46h    DWORD    offset of IDT within load image
  815.  4Ah    DWORD    size of IDT in bytes
  816.  4Eh    DWORD    offset of TSS within load image
  817.  52h    DWORD    size of TSS in bytes
  818.  56h    DWORD    minimum number of extra bytes to be allocated at end of program
  819.         (level 1 executables only)
  820.  5Ah    DWORD    maximum number of extra bytes to be allocated at end of program
  821.         (level 1 executables only)
  822.  5Eh    DWORD    base load offset (level 1 executables only)
  823.  62h    DWORD    initial ESP
  824.  66h    WORD    initial SS
  825.  68h    DWORD    initial EIP
  826.  6Ch    WORD    initial CS
  827.  6Eh    WORD    initial LDT
  828.  70h    WORD    initial TSS
  829.  72h    WORD    flags
  830.         bit 0: load image is packed
  831.         bit 1: 32-bit checksum is present
  832.         bits 4-2: type of relocation table
  833.  74h    DWORD    memory requirements for load image
  834.  78h    DWORD    32-bit checksum (optional)
  835.  7Ch    DWORD    size of stack segment in bytes
  836.  80h 256 BYTEs    reserved (0)
  837. SeeAlso: #0832,#0836
  838.  
  839. Format of Phar Lap segment information table entry:
  840. Offset    Size    Description    (Table 0834)
  841.  00h    WORD    selector number
  842.  02h    WORD    flags
  843.  04h    DWORD    base offset of selector
  844.  08h    DWORD    minimum number of extra bytes to be allocated to the segment
  845.  
  846. Format of 386|DOS-Extender run-time parameters:
  847. Offset    Size    Description    (Table 0835)
  848.  00h  2 BYTEs    signature "DX" (44h 58h)
  849.  02h    WORD    minimum number of real-mode params to leave free at run time
  850.  04h    WORD    maximum number of real-mode params to leave free at run time
  851.  06h    WORD    minimum interrupt buffer size in KB
  852.  08h    WORD    maximum interrupt buffer size in KB
  853.  0Ah    WORD    number of interrupt stacks
  854.  0Ch    WORD    size in KB of each interrupt stack
  855.  0Eh    DWORD    offset of byte past end of real-mode code and data
  856.  12h    WORD    size in KB of call buffers
  857.  14h    WORD    flags
  858.         bit 0: file is virtual memory manager
  859.         bit 1: file is a debugger
  860.  16h    WORD    unprivileged flag (if nonzero, executes at ring 1, 2, or 3)
  861.  18h 104 BYTEs    reserved (0)
  862.  
  863. Format of Phar Lap repeat block header:
  864. Offset    Size    Description    (Table 0836)
  865.  00h    WORD    byte count
  866.  02h    BYTE    repeat string length
  867.  
  868. Format of Borland debugging information header (following load image):
  869. Offset    Size    Description    (Table 0837)
  870.  00h    WORD    signature 52FBh
  871.  02h    WORD    version ID
  872.  04h    DWORD    size of name pool in bytes
  873.  08h    WORD    number of names in name pool
  874.  0Ah    WORD    number of type entries
  875.  0Ch    WORD    number of structure members
  876.  0Eh    WORD    number of symbols
  877.  10h    WORD    number of global symbols
  878.  12h    WORD    number of modules
  879.  14h    WORD    number of locals (optional)
  880.  16h    WORD    number of scopes in table
  881.  18h    WORD    number of line-number entries
  882.  1Ah    WORD    number of include files
  883.  1Ch    WORD    number of segment records
  884.  1Eh    WORD    number of segment/file correlations
  885.  20h    DWORD    size of load image after removing uninitialized data and debug
  886.           information
  887.  24h    DWORD    debugger hook; pointer into debugged program whose meaning
  888.           depends on program flags
  889.  28h    BYTE    program flags
  890.         bit 0: case-sensitive link
  891.         bit 1: pascal overlay program
  892.  29h    WORD    no longer used
  893.  2Bh    WORD    size of data pool in bytes
  894.  2Dh    BYTE    padding
  895.  2Eh    WORD    size of following header extension (currently 00h, 10h, or 20h)
  896.  30h    WORD    number of classes
  897.  32h    WORD    number of parents
  898.  34h    WORD    number of global classes (currently unused)
  899.  36h    WORD    number of overloads (currently unused)
  900.  38h    WORD    number of scope classes
  901.  3Ah    WORD    number of module classes
  902.  3Ch    WORD    number of coverage offsets
  903.  3Eh    DWORD    offset relative to symbol base of name pool
  904.  42h    WORD    number of browser information records
  905.  44h    WORD    number of optimized symbol records
  906.  46h    WORD    debugging flags
  907.  48h  8 BYTEs    padding
  908. Note:    additional information on the Borland debugging info may be found in
  909.       Borland's Open Architecture Handbook
  910. SeeAlso: #0813
  911. --------U-214B-------------------------------
  912. INT 21 - ELRES v1.0 only - INSTALLATION CHECK
  913.     AH = 4Bh
  914.     DS:DX = 0000h:0000h
  915. Return: ES:BX -> ELRES history structure (see #0606 at AH=2Bh/CX=454Ch)
  916.     DX = DABEh (signature, DAve BEnnett)
  917. Program: ELRES is an MS-DOS return code (errorlevel) recorder by David H.
  918.       Bennett
  919. SeeAlso: AH=2Bh/CX=454Ch
  920. --------v-214B04-----------------------------
  921. INT 21 - VIRUS - "MG", "699"/"Thirteen Minutes" - INSTALLATION CHECK
  922.     AX = 4B04h
  923. Return: CF clear if "MG" resident
  924.     AX = 044Bh if "699"/"Thirteen Minutes" resident
  925. SeeAlso: AX=4243h,AH=4Ah/BX=FFFFh,AX=4B21h
  926. --------D-214B05-----------------------------
  927. INT 21 - DOS 5+ - SET EXECUTION STATE
  928.     AX = 4B05h
  929.     DS:DX -> execution state structure (see #0838)
  930. Return: CF clear if successful
  931.         AX = 0000h
  932.     CF set on error
  933.         AX = error code (see #0885 at AH=59h)
  934. Note:    used by programs which intercept AX=4B00h to prepare new programs for
  935.       execution (including setting the DOS version number).     No DOS, BIOS
  936.       or other software interrupt may be called after return from this call
  937.       before commencement of the child process.  If DOS is running in the
  938.       HMA, A20 is turned off on return from this call.
  939. SeeAlso: AH=4Bh
  940.  
  941. Format of execution state structure:
  942. Offset    Size    Description    (Table 0838)
  943.  00h    WORD    reserved (00h)
  944.  02h    WORD    type flags
  945.         bit 0: program is an .EXE
  946.         bit 1: program is an overlay
  947.  04h    DWORD    pointer to ASCIZ name of program file
  948.  08h    WORD    PSP segment of new program
  949.  0Ah    DWORD    starting CS:IP of new program
  950.  0Eh    DWORD    program size including PSP
  951. --------v-214B20-----------------------------
  952. INT 21 - VIRUS - "Holocaust"/"Telefonica" - ???
  953.     AX = 4B20h
  954. SeeAlso: AX=4B04h,AX=4B21h
  955. --------v-214B21-----------------------------
  956. INT 21 C - VIRUS - "Holocaust"/"Telefonica" - ???
  957.     AX = 4B21h
  958. Note:    called at completion of virus installation
  959. SeeAlso: AX=4B04h,AX=4B20h,AX=4B25h
  960. --------v-214B25-----------------------------
  961. INT 21 - VIRUS - "1063"/"Mono" - INSTALLATION CHECK
  962.     AX = 4B25h
  963. Return: DI = 1234h if resident
  964. SeeAlso: AX=4B21h,AX=4B40h
  965. --------v-214B40-----------------------------
  966. INT 21 - VIRUS - "Plastique"/"AntiCad" - INSTALLATION CHECK
  967.     AX = 4B40h
  968. Return: AX = 5678h if resident
  969. SeeAlso: AX=4B25h,AX=4B41h,AX=4B4Ah
  970. --------v-214B41-----------------------------
  971. INT 21 - VIRUS - "Plastique"/"AntiCad" - ???
  972.     AX = 4B41h
  973.     ???
  974. Return: ???
  975. SeeAlso: AX=4B40h
  976. --------v-214B4A-----------------------------
  977. INT 21 - VIRUS - "Jabberwocky" - INSTALLATION CHECK
  978.     AX = 4B4Ah
  979. Return: AL = 57h if resident
  980. SeeAlso: AX=4B40h,AX=4B4Bh
  981. --------v-214B4B-----------------------------
  982. INT 21 - VIRUS - "Horse-2" - INSTALLATION CHECK
  983.     AX = 4B4Bh
  984. Return: CF clear if resident
  985. SeeAlso: AX=4B4Ah,AX=4B4Dh
  986. --------v-214B4D-----------------------------
  987. INT 21 - VIRUS - "Murphy-2", "Patricia"/"Smack" - INSTALLATION CHECK
  988.     AX = 4B4Dh
  989. Return: CF clear if resident
  990. SeeAlso: AX=4B4Ah,AX=4B50h
  991. --------v-214B50-----------------------------
  992. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - INSTALLATION CHECK
  993.     AX = 4B50h
  994. Return: AX = 1234h if resident
  995. SeeAlso: AX=4B4Dh,AX=4B53h,AX=4B60h
  996. --------v-214B53-----------------------------
  997. INT 21 - VIRUS - "Horse" - INSTALLATION CHECK
  998.     AX = 4B53h
  999. Return: CF clear if resident
  1000. SeeAlso: AX=4B50h,AX=4B53h/BX=2121h,AX=4B55h
  1001. --------v-214B53BX2121-----------------------
  1002. INT 21 - VIRUS - "One Half" - INSTALLATION CHECK
  1003.     AX = 4B53h
  1004.     BX = 2121h
  1005.     CX = 1212h
  1006.     DX = 0236h
  1007. Return: AX = 454Bh if installed
  1008. SeeAlso: AX=4B50h,AX=4B53h,AX=4B55h
  1009. --------v-214B55-----------------------------
  1010. INT 21 - VIRUS - "Sparse" - INSTALLATION CHECK
  1011.     AX = 4B55h
  1012. Return: AX = 1231h if resident
  1013. SeeAlso: AX=4B53h,AX=4B59h
  1014. --------v-214B59-----------------------------
  1015. INT 21 - VIRUS - "Murphy-1", "Murphy-4" - INSTALLATION CHECK
  1016.     AX = 4B59h
  1017. Return: CF clear if resident
  1018. SeeAlso: AX=4B50h,AX=4B5Eh
  1019. --------v-214B5E-----------------------------
  1020. INT 21 - VIRUS - "Brothers" - INSTALLATION CHECK
  1021.     AX = 4B5Eh
  1022. Return: CF clear if resident
  1023. SeeAlso: AX=4B59h,AX=4B87h
  1024. --------v-214B60-----------------------------
  1025. INT 21 - VIRUS - "Plastique-2576"/"AntiCad-2576" - ???
  1026.     AX = 4B60h
  1027.     ???
  1028. Return: ???
  1029. SeeAlso: AX=4B50h
  1030. --------v-214B87-----------------------------
  1031. INT 21 - VIRUS - "Shirley" - INSTALLATION CHECK
  1032.     AX = 4B87h
  1033. Return: AX = 6663h if resident
  1034. SeeAlso: AX=4B5Eh,AX=4B95h
  1035. --------v-214B95-----------------------------
  1036. INT 21 - VIRUS - "Zherkov-1882" - INSTALLATION CHECK
  1037.     AX = 4B95h
  1038. Return: AX = 1973h if resident
  1039. SeeAlso: AX=4B87h,AX=4BA7h
  1040. --------v-214BA7-----------------------------
  1041. INT 21 - VIRUS - "1876"/"Dash-em" - INSTALLATION CHECK
  1042.     AX = 4BA7h
  1043. Return: AX = B459h if resident
  1044. SeeAlso: AX=4B95h,AX=4BAAh
  1045. --------v-214BAA-----------------------------
  1046. INT 21 - VIRUS - "Nomenklatura" - INSTALLATION CHECK
  1047.     AX = 4BAAh
  1048. Return: CF clear if resident
  1049. SeeAlso: AX=4BA7h,AX=4BAFh
  1050. --------v-214BAF-----------------------------
  1051. INT 21 - VIRUS - "948"/"Screenplus1", "Magnitogorsk" - INSTALLATION CHECK
  1052.     AX = 4BAFh
  1053. Return: AL = AFh if "Magnitogorsk" resident
  1054.     AL = FAh if "948"/"Screenplus1" resident
  1055. SeeAlso: AX=4BAAh,AX=4BDDh
  1056. --------v-214BDD-----------------------------
  1057. INT 21 - VIRUS - "Lozinsky"/"Zherkov" - INSTALLATION CHECK
  1058.     AX = 4BDDh
  1059. Return: AX = 1234h
  1060. SeeAlso: AX=4BAFh,AX=4BFEh
  1061. --------v-214BEE-----------------------------
  1062. INT 21 - F-DRIVER.SYS v1.14+ - GRAB INT 21
  1063.     AX = 4BEEh
  1064. Return: AX = status
  1065.         1234h grab was successful
  1066.         2345h failed (INT 21 grabbed previously)
  1067. Program: F-DRIVER.SYS is part of the shareware F-PROT virus/trojan protection
  1068.       package by Fridrik Skulason
  1069. Note:    when called the first time, this function moves the INT 21 monitoring
  1070.       code from its original location in the INT 21 chain to be the first
  1071.       thing called by INT 21.  This is the mechanism used by F-NET.
  1072. SeeAlso: INT 2F/AX=4653h
  1073. --------k-214BF0-----------------------------
  1074. INT 21 - DIET v1.10+ (Overlay Mode) - INSTALLATION CHECK
  1075.     AX = 4BF0h
  1076. Return: CF clear if installed
  1077.         AX = 899Dh
  1078. Program: DIET is an executable-compression program by Teddy Matsumoto
  1079. SeeAlso: AX=37D0h,AX=4BF1h
  1080. --------k-214BF1-----------------------------
  1081. INT 21 - DIET v1.10+ (Overlay Mode) - EXPAND PROGRAM???
  1082.     AX = 4BF1h
  1083. Return: ???
  1084. SeeAlso: AX=37D0h,AX=4BF0h
  1085. --------v-214BFE-----------------------------
  1086. INT 21 - VIRUS - "Hitchcock", "Dark Avenger-1028", "1193" - INSTALLATION CHECK
  1087.     AX = 4BFEh
  1088. Return: AX = 1234h if "Hitchcock" resident
  1089.     AX = ABCDh if "1193"/"Copyright" resident
  1090.     DI = 55BBh if "Dark Avenger-1028" resident
  1091. SeeAlso: AX=4BDDh,AX=4BFFh"Justice"
  1092. --------v-214BFF-----------------------------
  1093. INT 21 - VIRUS - "USSR-707", "Justice", "Europe 92" - INSTALLATION CHECK
  1094.     AX = 4BFFh
  1095. Return: BL = FFh if "USSR-707" resident
  1096.     DI = 55AAh if "Justice" resident
  1097.     CF clear if "Europe 92" resident
  1098. SeeAlso: AX=4BFEh,AX=4BFFh"Cascade",AX=5252h
  1099. --------v-214BFFSI0000-----------------------
  1100. INT 21 - VIRUS - "Cascade" - INSTALLATION CHECK
  1101.     AX = 4BFFh
  1102.     SI = 0000h
  1103.     DI = 0000h
  1104. Return: DI = 55AAh if installed
  1105. SeeAlso: AX=4BFFh"Justice",AX=5252h
  1106. --------D-214C-------------------------------
  1107. INT 21 - DOS 2+ - "EXIT" - TERMINATE WITH RETURN CODE
  1108.     AH = 4Ch
  1109.     AL = return code
  1110. Return: never returns
  1111. Notes:    unless the process is its own parent (see #0603 at AH=26h, offset 16h
  1112.       in PSP), all open files are closed and all memory belonging to the
  1113.       process is freed
  1114.     all network file locks should be removed before calling this function
  1115. SeeAlso: AH=00h,AH=26h,AH=4Bh,AH=4Dh,INT 15/AH=12h/BH=02h,INT 20,INT 22
  1116. SeeAlso: INT 60/DI=0601h
  1117. ----------214C57-----------------------------
  1118. INT 21 - Headroom - ???
  1119.     AX = 4C57h
  1120.     DS:DX -> target address
  1121. Note:    jumps to target address instead of terminating program
  1122. SeeAlso: AX=5758h
  1123. --------D-214D-------------------------------
  1124. INT 21 - DOS 2+ - GET RETURN CODE (ERRORLEVEL)
  1125.     AH = 4Dh
  1126. Return: AH = termination type
  1127.         00h normal (INT 20,INT 21/AH=00h, or INT 21/AH=4Ch)
  1128.         01h control-C abort
  1129.         02h critical error abort
  1130.         03h terminate and stay resident (INT 21/AH=31h or INT 27)
  1131.     AL = return code
  1132. Notes:    the word in which DOS stores the return code is cleared after being
  1133.       read by this function, so the return code can only be retrieved once
  1134.     COMMAND.COM stores the return code of the last external command it
  1135.       executed as ERRORLEVEL
  1136.     this call should not be used if the child was started with AX=4B04h;
  1137.       use AH=8Ah instead
  1138.     the following sequence will close a Virtual DOS Machine under OS/2 2.0:
  1139.       MOV    AH,4Dh
  1140.       INT    21h
  1141.       HLT
  1142.       DB    02h,0FDh
  1143.       This sequence is the only way to close a specific VDM which was
  1144.       booted from floppy or a disk image.
  1145. SeeAlso: AH=4Bh,AH=4Ch,AH=8Ah
  1146. --------D-214E-------------------------------
  1147. INT 21 - DOS 2+ - "FINDFIRST" - FIND FIRST MATCHING FILE
  1148.     AH = 4Eh
  1149.     AL = special flag for use by APPEND (see note below)
  1150.     CX = file attribute mask (see #0643 at AX=4301h) (bits 0 and 5 ignored)
  1151.         0088h (Novell DOS 7) find first deleted file
  1152.     DS:DX -> ASCIZ file specification (may include path and wildcards)
  1153. Return: CF clear if successful
  1154.         [DTA] = FindFirst data block (see #0839)
  1155.     CF set on error
  1156.         AX = error code (02h,03h,12h) (see #0885 at AH=59h)
  1157. Notes:    for search attributes other than 08h, all files with at MOST the
  1158.       specified combination of hidden, system, and directory attributes
  1159.       will be returned.  Under DOS 2.x, searching for attribute 08h
  1160.       (volume label) will also return normal files, while under DOS 3+
  1161.       only the volume label (if any) will be returned.
  1162.     this call also returns successfully if given the name of a character
  1163.       device without wildcards.  DOS 2.x returns attribute 00h, size 0,
  1164.       and the current date and time.  DOS 3+ returns attribute 40h and the
  1165.       current date and time.
  1166.     immediately after an INT 2F/AX=B711h (APPEND return found name), the
  1167.       name at DS:DX will be overwritten; if AL=00h on entry, the actual
  1168.       found pathname will be stored, otherwise, the actual found path
  1169.       will be prepended to the original filespec without a path.
  1170.     under LANtastic, this call may be used to obtain a list of a server's
  1171.       shared resources by searching for "\\SERVER\*.*"; a list of printer
  1172.       resources may be obtained by searching for "\\SERVER\@*.*"
  1173.     under the FlashTek X-32 DOS extender, the filespec pointer is in DS:EDX
  1174. BUGS:    under DOS 3.x and 4.x, the second and subsequent calls to this function
  1175.       with a character device name (no wildcards) and search attributes
  1176.       which include the volume-label bit (08h) will fail unless there is
  1177.       an intervening DOS call which implicitly or explicity performs a
  1178.       directory search without the volume-label bit.  Such implicit
  1179.       searches are performed by CREATE (AH=3Ch), OPEN (AH=3Dh), UNLINK
  1180.       (AH=41h), and RENAME (AH=56h)
  1181.     DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
  1182. SeeAlso: AH=11h,AH=4Fh,AX=4301h,AH=71h,INT 2F/AX=111Bh,INT 2F/AX=B711h
  1183.  
  1184. Format of FindFirst data block:
  1185. Offset    Size    Description    (Table 0839)
  1186. ---PC-DOS 3.10, PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  1187.  00h    BYTE    drive letter (bits 0-6), remote if bit 7 set
  1188.  01h 11 BYTEs    search template
  1189.  0Ch    BYTE    search attributes
  1190. ---DOS 2.x (and some DOS 3.x???)---
  1191.  00h    BYTE    search attributes
  1192.  01h    BYTE    drive letter
  1193.  02h 11 BYTEs    search template
  1194. ---WILDUNIX.COM---
  1195.  00h 12 BYTEs    15-character wildcard search pattern and drive letter (packed)
  1196.  0Ch    BYTE    search attributes
  1197. ---DOS 2.x and most 3.x---
  1198.  0Dh    WORD    entry count within directory
  1199.  0Fh    DWORD    pointer to DTA???
  1200.  13h    WORD    cluster number of start of parent directory
  1201. ---PC-DOS 4.01, MS-DOS 3.2/3.3/5.0---
  1202.  0Dh    WORD    entry count within directory
  1203.  0Fh    WORD    cluster number of start of parent directory
  1204.  11h  4 BYTEs    reserved
  1205. ---all versions, documented fields---
  1206.  15h    BYTE    attribute of file found
  1207.  16h    WORD    file time (see #0876 at AX=5700h)
  1208.  18h    WORD    file date (see #0877 at AX=5700h)
  1209.  1Ah    DWORD    file size
  1210.  1Eh 13 BYTEs    ASCIZ filename+extension
  1211. --------f-214E-------------------------------
  1212. INT 21 - WILDUNIX.COM internal - INSTALLATION CHECK
  1213.     AH = 4Eh
  1214.     DS:DX = 0000h:0000h
  1215. Return: AH = 99h if installed
  1216. Program: WILDUNIX.COM is a resident Unix-style wildcard expander by Steve
  1217.       Hosgood and Terry Barnaby
  1218. --------D-214F-------------------------------
  1219. INT 21 - DOS 2+ - "FINDNEXT" - FIND NEXT MATCHING FILE
  1220.     AH = 4Fh
  1221.     [DTA] = data block from previous FindFirst or FindNext call
  1222. Return: CF clear if successful
  1223.     CF set on error
  1224.         AX = error code (12h) (see #0885 at AH=59h)
  1225. Note:    under Novell DOS 7, if the FindFirst call (AH=4Eh) had CX=0088h, then
  1226.       the next matching deleted file will be returned
  1227. BUG:    DR-DOS 3.41 and 5.0 return the Directory attribute for the volume label
  1228. SeeAlso: AH=12h,AH=4Eh,AH=71h,AH=72h
  1229. --------D-2150-------------------------------
  1230. INT 21 - DOS 2+ internal - SET CURRENT PROCESS ID (SET PSP ADDRESS)
  1231.     AH = 50h
  1232.     BX = segment of PSP for new process
  1233. Notes:    DOS uses the current PSP address to determine which processes own files
  1234.       and memory; it corresponds to process identifiers used by other OSs
  1235.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  1236.       handler without setting the Critical Error flag
  1237.     under MS-DOS 3+ and DR-DOS 3.41+, this function does not use any of
  1238.       the DOS-internal stacks and may thus be called at any time, even
  1239.       during another INT 21h call
  1240.     some Microsoft applications such as Quick C 2.51 use segments of 0000h
  1241.       and FFFFh and direct access to the SDA (see #0892 at AX=5D06h) to
  1242.       test whether they are running under MS-DOS rather than a compatible
  1243.       OS; although one should only call this function with valid PSP
  1244.       addresses, any program hooking it should be prepared to handle
  1245.       invalid addresses
  1246.     this function is supported by the OS/2 compatibility box
  1247.     this call was undocumented prior to the release of DOS 5.0
  1248. SeeAlso: AH=26h,AH=51h,AH=62h
  1249. --------D-2151-------------------------------
  1250. INT 21 - DOS 2+ internal - GET CURRENT PROCESS ID (GET PSP ADDRESS)
  1251.     AH = 51h
  1252. Return: BX = segment of PSP for current process
  1253. Notes:    DOS uses the current PSP address to determine which processes own files
  1254.       and memory; it corresponds to process identifiers used by other OSs
  1255.     under DOS 2.x, this function cannot be invoked inside an INT 28h
  1256.       handler without setting the Critical Error flag
  1257.     under DOS 3+, this function does not use any of the DOS-internal stacks
  1258.       and may thus be called at any time, even during another INT 21h call
  1259.     supported by OS/2 compatibility box
  1260.     identical to the documented AH=62h
  1261.     this call was undocumented prior to the release of DOS 5.0
  1262. SeeAlso: AH=26h,AH=50h,AH=62h
  1263. --------D-2152-------------------------------
  1264. INT 21 U - DOS 2+ internal - "SYSVARS" - GET LIST OF LISTS
  1265.     AH = 52h
  1266. Return: ES:BX -> DOS list of lists (see #0840)
  1267. Notes:    partially supported by OS/2 v1.1 compatibility box (however, most
  1268.       pointers are FFFFh:FFFFh, LASTDRIVE is FFh, and the NUL header "next"
  1269.       pointer is FFFFh:FFFFh).
  1270.     partially supported by the Windows NT DOS box; contains only a
  1271.       rudimentary Current Directory Structure (see #0857)
  1272.     on return, ES points at the DOS data segment (see also INT 2F/AX=1203h)
  1273.     Quarterdeck's suggested check for the use of its DOSDATA.SYS or
  1274.       DOS-UP.SYS is to test whether the list-of-lists segment is greater
  1275.       than the segment of the first memory block; a better check for
  1276.       DOS-UP.SYS is INT 21/AX=2B01h/CX=444Dh
  1277. SeeAlso: INT 2F/AX=1203h
  1278.  
  1279. Format of List of Lists:
  1280. Offset    Size    Description    (Table 0840)
  1281.  -24    WORD    (DOS 3.1+) contents of CX from INT 21/AX=5E01h
  1282.  -22    WORD    (DOS ???+) LRU counter for FCB caching
  1283.  -20    WORD    (DOS ???+) LRU counter for FCB opens
  1284.  -18    DWORD    (DOS ???+) address of OEM function handler (see INT 21/AH=F8h)
  1285.             FFFFh:FFFFh if not installed or not available
  1286.  -14    WORD    (DOS ???+) offset in DOS CS of code to return from INT 21 call
  1287.  -12    WORD    (DOS 3.1+) sharing retry count (see AX=440Bh)
  1288.  -10    WORD    (DOS 3.1+) sharing retry delay (see AX=440Bh)
  1289.  -8    DWORD    (DOS 3+) pointer to current disk buffer
  1290.  -4    WORD    (DOS 3+) pointer in DOS data segment of unread CON input
  1291.         when CON is read via a handle, DOS reads an entire line,
  1292.           and returns the requested portion, buffering the rest
  1293.           for the next read.  0000h indicates no unread input
  1294.  -2    WORD    segment of first memory control block (see #0841)
  1295.  00h    DWORD    pointer to first Drive Parameter Block (see #0620 at AH=32h)
  1296.  04h    DWORD    -> first System File Table (see #0851,#0852,#0853,#0854)
  1297.  08h    DWORD    pointer to active CLOCK$ device's header (most recently loaded
  1298.           driver with CLOCK bit set)
  1299.  0Ch    DWORD    pointer to active CON device's header (most recently loaded
  1300.           driver with STDIN bit set)
  1301. ---DOS 2.x---
  1302.  10h    BYTE    number of logical drives in system
  1303.  11h    WORD    maximum bytes/block of any block device
  1304.  13h    DWORD    pointer to first disk buffer (see #0861,#0862)
  1305.  17h 18 BYTEs    actual NUL device driver header (not a pointer!)
  1306.         NUL is always the first device on DOS's linked list of device
  1307.           drivers. (see #0858)
  1308. ---DOS 3.0---
  1309.  10h    BYTE    number of block devices
  1310.  11h    WORD    maximum bytes/block of any block device
  1311.  13h    DWORD    pointer to first disk buffer (see #0862,#0864)
  1312.  17h    DWORD    pointer to array of current directory structures (see #0855)
  1313.  1Bh    BYTE    value of LASTDRIVE command in CONFIG.SYS (default 5)
  1314.  1Ch    DWORD    pointer to STRING= workspace area
  1315.  20h    WORD    size of STRING area (the x in STRING=x from CONFIG.SYS)
  1316.  22h    DWORD    pointer to FCB table
  1317.  26h    WORD    the y in FCBS=x,y from CONFIG.SYS
  1318.  28h 18 BYTEs    actual NUL device driver header (not a pointer!)
  1319.         NUL is always the first device on DOS's linked list of device
  1320.           drivers. (see #0858)
  1321. ---DOS 3.1-3.3---
  1322.  10h    WORD    maximum bytes per sector of any block device
  1323.  12h    DWORD    pointer to first disk buffer in buffer chain (see #0862)
  1324.  16h    DWORD    pointer to array of current directory structures (see #0855)
  1325.  1Ah    DWORD    pointer to system FCB tables (see #0852,#0853,#0854)
  1326.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  1327.  20h    BYTE    number of block devices installed
  1328.  21h    BYTE    number of available drive letters (largest of 5, installed
  1329.           block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  1330.           current directory structure array.
  1331.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  1332.         NUL is always the first device on DOS's linked list of device
  1333.           drivers. (see #0858)
  1334.  34h    BYTE    number of JOIN'ed drives
  1335. ---DOS 4.x---
  1336.  10h    WORD    maximum bytes per sector of any block device
  1337.  12h    DWORD    pointer to disk buffer info record (see #0864,#0865)
  1338.         Note: although the initialization code in IO.SYS uses this
  1339.           pointer, MSDOS.SYS does not, instead using the hardcoded     
  1340.           address of the info record
  1341.  16h    DWORD    pointer to array of current directory structures
  1342.         (see #0855,#0856)
  1343.  1Ah    DWORD    pointer to system FCB tables (see #0852,#0853,#0854)
  1344.  1Eh    WORD    number of protected FCBs (the y in the CONFIG.SYS FCBS=x,y)
  1345.         (always 00h for DOS 5.0)
  1346.  20h    BYTE    number of block devices installed
  1347.  21h    BYTE    number of available drive letters (largest of 5, installed
  1348.           block devices, and CONFIG.SYS LASTDRIVE=).  Also size of
  1349.           current directory structure array.
  1350.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  1351.         NUL is always the first device on DOS's linked list of device
  1352.           drivers. (see #0858)
  1353.  34h    BYTE    number of JOIN'ed drives
  1354.  35h    WORD    pointer within IBMDOS code segment to list of special program
  1355.           names (see #0874)
  1356.         (always 0000h for DOS 5.0)
  1357.  37h    DWORD    pointer to FAR routine for resident IFS utility functions
  1358.         (see #0870)
  1359.         may be called by any IFS driver which does not wish to
  1360.           service functions 20h or 24h-28h itself
  1361.  3Bh    DWORD    pointer to chain of IFS (installable file system) drivers
  1362.  3Fh    WORD    the x in BUFFERS x,y (rounded up to multiple of 30 if in EMS)
  1363.  41h    WORD    number of lookahead buffers (the y in BUFFERS x,y)
  1364.  43h    BYTE    boot drive (1=A:)
  1365.  44h    BYTE    flag: 01h to use DWORD moves (80386+), 00h otherwise
  1366.  45h    WORD    extended memory size in KB
  1367. ---DOS 5.0-6.0---
  1368.  10h 39 BYTEs    as for DOS 4.x (see above)
  1369.  37h    DWORD    pointer to SETVER program list or 0000h:0000h
  1370.  3Bh    WORD    (DOS=HIGH) offset in DOS CS of function to fix A20 control
  1371.           when executing special .COM format
  1372.  3Dh    WORD    PSP of most-recently EXECed program if DOS in HMA, 0000h if low
  1373.         used for maintaining count of INT 21 calls which disable A20
  1374.           on return
  1375.  3Fh  8 BYTEs    as for DOS 4.x (see above)
  1376. ---Windows NT DOS Box---
  1377.  10h  6 BYTEs    ???
  1378.  16h    DWORD    pointer to array of current directory structures (see #0857)
  1379.  1Ah  6 BYTEs    ???
  1380.  20h    BYTE    number of block devices installed
  1381.  21h    BYTE    number of local drive letters (= installed block devices)
  1382.         Also size of current directory structure array.
  1383.  22h 18 BYTEs    actual NUL device driver header (not a pointer!)
  1384.         NUL is always the first device on DOS's linked list of device
  1385.           drivers. (see #0858)
  1386.  
  1387. Format of DOS memory control block (see also below):
  1388. Offset    Size    Description    (Table 0841)
  1389.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  1390.  01h    WORD    PSP segment of owner or special flag value (see #0842)
  1391.  03h    WORD    size of memory block in paragraphs
  1392.  05h  3 BYTEs    unused by MS-DOS
  1393.         (386MAX) if locked-out block, region start/prev region end
  1394. ---DOS 2.x,3.x---
  1395.  08h  8 BYTEs    unused
  1396. ---DOS 4+ ---
  1397.  08h  8 BYTEs    ASCII program name if PSP memory block or DR-DOS UMB,
  1398.           else garbage
  1399.         null-terminated if less than 8 characters
  1400. Notes:    the next MCB is at segment (current + size + 1)
  1401.     under DOS 3.1+, the first memory block is the DOS data segment,
  1402.       containing installable drivers, buffers, etc.     Under DOS 4+ it is
  1403.       divided into subsegments, each with its own memory control block
  1404.       (see #0845), the first of which is at offset 0000h.
  1405.     for DOS 5+, blocks owned by DOS may have either "SC" or "SD" in bytes
  1406.       08h and 09h.    "SC" is system code or locked-out inter-UMB memory,
  1407.       "SD" is system data, device drivers, etc.
  1408.     Some versions of DR-DOS use only seven characters of the program name,
  1409.       placing a NUL in the eighth byte.
  1410. SeeAlso: #0843,#0844,#0845
  1411.  
  1412. (Table 0842)
  1413. Values for special flag PSP segments:
  1414.  0000h    free
  1415.  0006h    DR-DOS XMS UMB
  1416.  0007h    DR-DOS excluded upper memory ("hole")
  1417.  0008h    belongs to DOS
  1418.  FFF7h    386MAX v6.01+ ???
  1419.  FFFAh    386MAX UMB control block (see #0697 at AX=4402h"386MAX")
  1420.  FFFDh    386MAX locked-out memory
  1421.  FFFEh    386MAX UMB (normally immediately follows its control block)
  1422.  FFFFh    386MAX v6.01+ device driver
  1423.  
  1424. Format of MS-DOS 5+ UMB control block:
  1425. Offset    Size    Description    (Table 0843)
  1426.  00h    BYTE    type: 5Ah if last block in chain, 4Dh otherwise
  1427.  01h    WORD    first available paragraph in UMB if control block at start
  1428.           of UMB, 000Ah if control block at end of UMB
  1429.  03h    WORD    length in paragraphs of following UMB or locked-out region
  1430.  05h  3 BYTEs    unused
  1431.  08h  8 BYTEs    block type name: "UMB" if start block, "SM" if end block in UMB
  1432.  
  1433. Format of STARLITE (General Software's Embedded DOS) memory control block:
  1434. Offset    Size    Description    (Table 0844)
  1435.  00h    BYTE    block type: 5Ah if last block in chain, otherwise 4Dh
  1436.  01h    WORD    PSP segment of owner, 0000h if free, 0008h if belongs to DOS
  1437.  03h    WORD    size of memory block in paragraphs
  1438.  05h    BYTE    unused
  1439.  06h    WORD    segment address of next memory control block (0000h if last)
  1440.  08h    WORD    segment address of previous memory control block or 0000h
  1441.  0Ah  6 BYTEs    reserved
  1442.  
  1443. Format of DOS 4+ data segment subsegment control blocks:
  1444. Offset    Size    Description    (Table 0845)
  1445.  00h    BYTE    subsegment type (blocks typically appear in this order)
  1446.         "D"  device driver
  1447.         "E"  device driver appendage
  1448.         "I"  IFS (Installable File System) driver
  1449.         "F"  FILES=  control block storage area (for FILES>5)
  1450.         "X"  FCBS=   control block storage area, if present
  1451.         "C"  BUFFERS EMS workspace area (if BUFFERS /X option used)
  1452.         "B"  BUFFERS=  storage area
  1453.         "L"  LASTDRIVE=     current directory structure array storage area
  1454.         "S"  STACKS=  code and data area, if present (see #0846,#0847)
  1455.         "T"  INSTALL= transient code
  1456.  01h    WORD    paragraph of subsegment start (usually the next paragraph)
  1457.  03h    WORD    size of subsegment in paragraphs
  1458.  05h  3 BYTEs    unused
  1459.  08h  8 BYTEs    for types "D" and "I", base name of file from which the driver
  1460.           was loaded (unused for other types)
  1461.  
  1462. Format of data at start of STACKS code segment (if present):
  1463. Offset    Size    Description    (Table 0846)
  1464.  00h    WORD    ???
  1465.  02h    WORD    number of stacks (the x in STACKS=x,y)
  1466.  04h    WORD    size of stack control block array (should be 8*x)
  1467.  06h    WORD    size of each stack (the y in STACKS=x,y)
  1468.  08h    DWORD    pointer to STACKS data segment
  1469.  0Ch    WORD    offset in STACKS data segment of stack control block array
  1470.  0Eh    WORD    offset in STACKS data segment of last element of that array
  1471.  10h    WORD    offset in STACKS data segment of the entry in that array for
  1472.           the next stack to be allocated (initially same as value in
  1473.           0Eh and works its way down in steps of 8 to the value in
  1474.           0Ch as hardware interrupts pre-empt each other)
  1475. Note:    the STACKS code segment data may, if present, be located as follows:
  1476.     DOS 3.2:    The code segment data is at a paragraph boundary fairly early
  1477.           in the IBMBIO segment (seen at 0070:0190h)
  1478.     DOS 3.3:    The code segment is at a paragraph boundary in the DOS data
  1479.           segment, which may be determined by inspecting the segment
  1480.           pointers of the vectors for those of interrupts 02h, 08h-0Eh,
  1481.           70h, 72-77h which have not been redirected by device drivers
  1482.           or TSRs.
  1483.     DOS 4+    Identified by sub-segment control block type "S" within the DOS
  1484.           data segment.
  1485. SeeAlso: #0848,INT B4"STACKMAN"
  1486.  
  1487. Format of array elements in STACKS data segment:
  1488. Offset    Size    Description    (Table 0847)
  1489.  00h    BYTE    status: 00h=free, 01h=in use, 03h=corrupted by overflow of
  1490.           higher stack.
  1491.  01h    BYTE    not used
  1492.  02h    WORD    previous SP
  1493.  04h    WORD    previous SS
  1494.  06h    WORD    ptr to word at top of stack (new value for SP). The word at the
  1495.           top of the stack is preset to point back to this control
  1496.           block.
  1497.  
  1498. Format of SHARE.EXE hooks (DOS 3.1-6.00):
  1499. Offset    Size    Description    (Table 0848)
  1500. (offsets from first system file table--pointed at by ListOfLists+04h)
  1501. -3Ch    DWORD    pointer to FAR routine for ???
  1502.         Note: not called by MS-DOS 3.3, set to 0000h:0000h by
  1503.             SHARE 3.3+
  1504. -38h    DWORD    pointer to FAR routine called on opening file
  1505.         on call, internal DOS location points at filename
  1506.           (see #0892 at AX=5D06h)
  1507.         Return: CF clear if successful
  1508.             CF set on error
  1509.                 AX = DOS error code (24h) (see #0885 at AH=59h)
  1510.         Note: SHARE directly accesses DOS-internal data to get name of
  1511.             file just opened
  1512. -34h    DWORD    pointer to FAR routine called on closing file
  1513.         ES:DI -> system file table
  1514.         Note: does something to every Record Lock Record for file
  1515. -30h    DWORD    pointer to FAR routine to close all files for given computer
  1516.         (called by AX=5D03h)
  1517. -2Ch    DWORD    pointer to FAR routine to close all files for given process
  1518.         (called by AX=5D04h)
  1519. -28h    DWORD    pointer to FAR routine to close file by name
  1520.         (called by AX=5D02h)
  1521.         DS:SI -> DOS parameter list (see #0891 at AX=5D00h)
  1522.            DPL's DS:DX -> name of file to close
  1523.         Return: CF clear if successful
  1524.             CF set on error
  1525.                 AX = DOS error code (03h) (see #0885 at AH=59h)
  1526. -24h    DWORD    pointer to FAR routine to lock region of file
  1527.         call with BX = file handle
  1528.               ---DOS 3.x---
  1529.               CX:DX = starting offset
  1530.               SI:AX = size
  1531.               ---DOS 4+---
  1532.               DS:DX -> lock range
  1533.                     DWORD start offset
  1534.                     DWORD size in bytes
  1535.         Return: CF set on error
  1536.                 AL = DOS error code (21h) (see #0885 at AH=59h)
  1537.         Note: not called if file is marked as remote
  1538. -20h    DWORD    pointer to FAR routine to unlock region of file
  1539.         call with BX = file handle
  1540.               ---DOS 3.x---
  1541.               CX:DX = starting offset
  1542.               SI:AX = size
  1543.               ---DOS 4+---
  1544.               DS:DX -> lock range
  1545.                     DWORD start offset
  1546.                     DWORD size in bytes
  1547.         Return: CF set on error
  1548.                 AL = DOS error code (21h) (see #0885 at AH=59h)
  1549.         Note: not called if file is marked as remote
  1550. -1Ch    DWORD    pointer to FAR routine to check if file region is locked
  1551.         call with ES:DI -> system file table entry for file
  1552.             CX = length of region from current position in file
  1553.         Return: CF set if any portion of region locked
  1554.                 AX = 0021h
  1555. -18h    DWORD    pointer to FAR routine to get open file list entry
  1556.         (called by AX=5D05h)
  1557.         call with DS:SI -> DOS parameter list (see #0891 at AX=5D00h)
  1558.             DPL's BX = index of sharing record
  1559.             DPL's CX = index of SFT in SFT chain of sharing rec
  1560.         Return: CF set on error or not loaded
  1561.                 AX = DOS error code (12h) (see #0885 at AH=59h)
  1562.             CF clear if successful
  1563.                 ES:DI -> filename
  1564.                 CX = number of locks owned by specified SFT
  1565.                 BX = network machine number
  1566.                 DX destroyed
  1567. -14h    DWORD    pointer to FAR routine for updating FCB from SFT???
  1568.         call with DS:SI -> unopened FCB
  1569.               ES:DI -> system file table entry
  1570.         Return: BL = C0h???
  1571.         Note: copies following fields from SFT to FCB:
  1572.            starting cluster of file      0Bh     1Ah
  1573.            sharing record offset      33h     1Ch
  1574.            file attribute          04h     1Eh
  1575. -10h    DWORD    pointer to FAR routine to get first cluster of FCB file ???
  1576.         call with ES:DI -> system file table entry
  1577.               DS:SI -> FCB
  1578.         Return: CF set if SFT closed or sharing record offsets
  1579.                 mismatched
  1580.             CF clear if successful
  1581.                 BX = starting cluster number from FCB
  1582. -0Ch    DWORD    pointer to FAR routine to close file if duplicate for process
  1583.         DS:SI -> system file table
  1584.         Return: AX = number of handle in JFT which already uses SFT
  1585.         Note: called during open/create of a file
  1586.         Note: if SFT was opened with inheritance enabled and sharing
  1587.             mode 111, does something to all other SFTs owned by
  1588.             same process which have the same file open mode and
  1589.             sharing record
  1590. -08h    DWORD    pointer to FAR routine for closing file
  1591.         Note: closes various handles referring to file most-recently
  1592.             opened
  1593. -04h    DWORD    pointer to FAR routine to update directory info in related SFT
  1594.           entries
  1595.         call with ES:DI -> system file table entry for file (see #0853)
  1596.               AX = subfunction (apply to each related SFT)
  1597.                 00h: update time stamp (offset 0Dh) and date
  1598.                      stamp (offset 0Fh)
  1599.                 01h: update file size (offset 11h) and starting
  1600.                      cluster (offset 0Bh).  Sets last-accessed
  1601.                      cluster fields to start of file if file
  1602.                      never accessed
  1603.                 02h: as function 01h, but last-accessed fields
  1604.                      always changed
  1605.                 03h: do both functions 00h and 02h
  1606.         Note: follows ptr at offset 2Bh in system file table entries
  1607.         Note: NOP if opened with no-inherit or via FCB
  1608. Notes:    most of the above hooks (except -04h, -14h, -18h, and -3Ch) assume
  1609.       either that SS=DOS DS or SS=DS=DOS DS and directly access
  1610.       DOS-internal data
  1611.     sharing hooks are not supported by DR-DOS 5-6; they appear to be
  1612.       supported by Novell DOS 7, with a segment of 0000h indicating the
  1613.       DOS data segment
  1614. SeeAlso: #0849,#0850
  1615.  
  1616. Format of sharing record:
  1617. Offset    Size    Description    (Table 0849)
  1618.  00h    BYTE    flag
  1619.         00h free block
  1620.         01h allocated block
  1621.         FFh end marker
  1622.  01h    WORD    size of block
  1623.  03h    BYTE    checksum of pathname (including NUL)
  1624.         if sum of ASCII values is N, checksum is (N/256 + N%256)
  1625.  04h    WORD    offset in SHARE's DS of first Record Lock Record (see #0850)
  1626.  06h    DWORD    pointer to start of system file table chain for file
  1627.  0Ah    WORD    unique sequence number
  1628.  0Ch    var    ASCIZ full pathname
  1629. Note:    not supported by DR-DOS SHARE 1.1 and 2.0; will reportedly be
  1630.       supported by Novell DOS 7
  1631. SeeAlso: #0848,#0850
  1632.  
  1633. Format of SHARE.EXE Record Lock Record:
  1634. Offset    Size    Description    (Table 0850)
  1635.  00h    WORD    offset in SHARE's DS of next lock table in list or 0000h
  1636.  02h    DWORD    offset in file of start of locked region
  1637.  06h    DWORD    offset in file of end of locked region
  1638.  0Ah    DWORD    pointer to System File Table entry for this file
  1639.  0Eh    WORD    PSP segment of lock's owner
  1640. ---DOS 5+ ---
  1641.  10h    WORD    lock type: (00h lock all, 01h lock writes only)
  1642. SeeAlso: #0848,#0849,#0851,#0854
  1643.  
  1644. Format of DOS 2.x system file tables:
  1645. Offset    Size    Description    (Table 0851)
  1646.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  1647.  04h    WORD    number of files in this table
  1648.  06h  28h bytes per file
  1649.     Offset    Size    Description
  1650.      00h    BYTE    number of file handles referring to this file
  1651.      01h    BYTE    file open mode (see #0627 at AH=3Dh)
  1652.      02h    BYTE    file attribute
  1653.      03h    BYTE    drive (0 = character device, 1 = A, 2 = B, etc)
  1654.      04h 11 BYTEs    filename in FCB format (no path,no period,blank-padded)
  1655.      0Fh    WORD    ???
  1656.      11h    WORD    ???
  1657.      13h    DWORD    file size???
  1658.      17h    WORD    file date in packed format (see #0877 at AX=5700h)
  1659.      19h    WORD    file time in packed format (see #0876 at AX=5700h)
  1660.      1Bh    BYTE    device attribute (see #0646 at AX=4400h)
  1661.     ---character device---
  1662.      1Ch    DWORD    pointer to device driver
  1663.     ---block device---
  1664.      1Ch    WORD    starting cluster of file
  1665.      1Eh    WORD    relative cluster in file of last cluster accessed
  1666.     ------
  1667.      20h    WORD    absolute cluster number of current cluster
  1668.      22h    WORD    ???
  1669.      24h    DWORD    current file position???
  1670. SeeAlso: #0852,#0853,#0854
  1671.  
  1672. Format of DOS 3.0 system file tables and FCB tables:
  1673. Offset    Size    Description    (Table 0852)
  1674.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  1675.  04h    WORD    number of files in this table
  1676.  06h  38h bytes per file
  1677.     Offset    Size    Description
  1678.      00h-1Eh as for DOS 3.1+ (see #0853)
  1679.      1Fh    WORD    byte offset of directory entry within sector
  1680.      21h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  1681.      2Ch    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  1682.      30h    WORD    (SHARE.EXE) network machine number which opened file
  1683.             (Windows Enhanced mode DOSMGR uses the virtual machine
  1684.               ID as the machine number; see INT 2F/AX=1683h)
  1685.      32h    WORD    PSP segment of file's owner (first three entries for
  1686.               AUX/CON/PRN contain segment of IO.SYS startup code)
  1687.      34h    WORD    (SHARE.EXE) offset in SHARE code seg of share record
  1688.      36h    WORD    ??? apparently always 0000h
  1689. SeeAlso: #0851,#0853,#0854
  1690.  
  1691. Format of DOS 3.1-3.3x, DR-DOS 5.0-6.0 system file tables and FCB tables:
  1692. Offset    Size    Description    (Table 0853)
  1693.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  1694.  04h    WORD    number of files in this table
  1695.  06h  35h bytes per file
  1696.     Offset    Size    Description
  1697.      00h    WORD    number of file handles referring to this file
  1698.      02h    WORD    file open mode (see AX=6C00h, #0627 at AH=3Dh)
  1699.             bit 15 set if this file opened via FCB
  1700.      04h    BYTE    file attribute (see #0643 at AX=4301h)
  1701.      05h    WORD    device info word (see #0646 at AX=4400h)
  1702.             bit 15 set if remote file
  1703.             bit 14 set means do not set file date/time on closing
  1704.             bit 12 set means don't inherit on EXEC
  1705.             bits 5-0 drive number for disk files
  1706.      07h    DWORD    pointer to device driver header if character device
  1707.             else pointer to DOS Drive Parameter Block
  1708.               (see #0620 at AH=32h)
  1709.      0Bh    WORD    starting cluster of file
  1710.      0Dh    WORD    file time in packed format (see #0876 at AX=5700h)
  1711.             not used for character devices in DR-DOS
  1712.      0Fh    WORD    file date in packed format (see #0877 at AX=5700h)
  1713.             not used for character devices in DR-DOS
  1714.      11h    DWORD    file size
  1715.     ---system file table---
  1716.      15h    DWORD    current offset in file (may be larger than size of
  1717.               file; INT 21/AH=42h does not check new position)
  1718.     ---FCB table---
  1719.      15h    WORD    counter for last I/O to FCB
  1720.      17h    WORD    counter for last open of FCB
  1721.             (these are separate to determine the times of the
  1722.               latest I/O and open)
  1723.     ---
  1724.      19h    WORD    relative cluster within file of last cluster accessed
  1725.      1Bh    WORD    absolute cluster number of last cluster accessed
  1726.             0000h if file never read or written???
  1727.      1Dh    WORD    number of sector containing directory entry
  1728.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  1729.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  1730.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  1731.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  1732.             (Windows Enhanced mode DOSMGR uses the virtual machine
  1733.               ID as the machine number; see INT 2F/AX=1683h)
  1734.      31h    WORD    PSP segment of file's owner (see #0603 at AH=26h)
  1735.               (first three entries for AUX/CON/PRN contain segment
  1736.               of IO.SYS startup code)
  1737.      33h    WORD    offset within SHARE.EXE code segment of
  1738.               sharing record (see #0849)  0000h = none
  1739. SeeAlso: #0851,#0852,#0854
  1740.  
  1741. Format of DOS 4.0-6.0 system file tables and FCB tables:
  1742. Offset    Size    Description    (Table 0854)
  1743.  00h    DWORD    pointer to next file table (offset FFFFh if last)
  1744.  04h    WORD    number of files in this table
  1745.  06h  3Bh bytes per file
  1746.     Offset    Size    Description
  1747.      00h    WORD    number of file handles referring to this file
  1748.             FFFFh if in use but not referenced
  1749.      02h    WORD    file open mode (see AX=6C00h,#0627 at AH=3Dh)
  1750.             bit 15 set if this file opened via FCB
  1751.      04h    BYTE    file attribute (see #0643 at AX=4301h)
  1752.      05h    WORD    device info word (see also #0646 at AX=4400h)
  1753.             bit 15 set if remote file
  1754.             bit 14 set means do not set file date/time on closing
  1755.             bit 13 set if named pipe
  1756.             bit 12 set if no inherit
  1757.             bit 11 set if network spooler
  1758.             bit 7  set if device, clear if file (only if local)
  1759.             bits 6-0 as for AX=4400h
  1760.      07h    DWORD    pointer to device driver header if character device
  1761.             else pointer to DOS Drive Parameter Block
  1762.               (see #0620 at AH=32h) or REDIR data
  1763.      0Bh    WORD    starting cluster of file (local files only)
  1764.      0Dh    WORD    file time in packed format (see #0876)
  1765.      0Fh    WORD    file date in packed format (see #0877)
  1766.      11h    DWORD    file size
  1767.      15h    DWORD    current offset in file (SFT)
  1768.             LRU counters (FCB table, two WORDs)
  1769.     ---local file---
  1770.      19h    WORD    relative cluster within file of last cluster accessed
  1771.      1Bh    DWORD    number of sector containing directory entry
  1772.      1Fh    BYTE    number of dir entry within sector (byte offset/32)
  1773.     ---network redirector---
  1774.      19h    DWORD    pointer to REDIRIFS record
  1775.      1Dh  3 BYTEs    ???
  1776.     ------
  1777.      20h 11 BYTEs    filename in FCB format (no path/period, blank-padded)
  1778.      2Bh    DWORD    (SHARE.EXE) pointer to previous SFT sharing same file
  1779.      2Fh    WORD    (SHARE.EXE) network machine number which opened file
  1780.             (Windows Enhanced mode DOSMGR uses the virtual machine
  1781.               ID as the machine number; see INT 2F/AX=1683h)
  1782.      31h    WORD    PSP segment of file's owner (see #0603 at AH=26h)
  1783.               (first three entries for AUX/CON/PRN contain segment
  1784.               of IO.SYS startup code)
  1785.      33h    WORD    offset within SHARE.EXE code segment of
  1786.             sharing record (see #0808)  0000h = none
  1787.      35h    WORD    (local) absolute cluster number of last clustr accessed
  1788.             (redirector) ???
  1789.      37h    DWORD    pointer to IFS driver for file, 0000000h if native DOS
  1790. Note:    the OS/2 2.0 DOS Boot Session does not properly fill in the filename
  1791.       field due to incomplete support for SFTs; the OS/2 2.0 DOS Window
  1792.       does not appear to support SFTs at all
  1793. SeeAlso: #0851,#0852,#0853
  1794.  
  1795. Format of current directory structure (CDS) (array, LASTDRIVE entries):
  1796. Offset    Size    Description    (Table 0855)
  1797.  00h 67 BYTEs    ASCIZ path in form X:\PATH (local) or UNC form
  1798.           \\MACH\PATH (network, see notes below)
  1799.  43h    WORD    drive attributes (see also note below and AX=5F07h)
  1800.         bit 15: uses network redirector     \ invalid if 00, installable
  1801.         bit 14: physical drive         / file system if 11
  1802.         bit 13: JOIN'ed      \ path above is true path that would be
  1803.         bit 12: SUBST'ed  / needed if not under SUBST or JOIN
  1804.         bit  7: remote drive hidden from redirector's assign-list and
  1805.               exempt from network connection make/break commands;
  1806.               set for CD-ROM drives
  1807.  45h    DWORD    pointer to Drive Parameter Block for drive
  1808.           (see #0620 at AH=32h)
  1809. ---local drives---
  1810.  49h    WORD    starting cluster of current directory
  1811.         0000h = root, FFFFh = never accessed
  1812.  4Bh    WORD    ??? seems to be FFFFh always
  1813.  4Dh    WORD    ??? seems to be FFFFh always
  1814. ---network drives---
  1815.  49h    DWORD    pointer to redirector or REDIRIFS record, or FFFFh:FFFFh
  1816.         (DOS 4 only) available for use by IFS driver
  1817.  4Dh    WORD    stored user data from INT 21/AX=5F03h
  1818. ------
  1819.  4Fh    WORD    offset in current directory path of backslash corresponding to
  1820.           root directory for drive
  1821.         this value specifies how many characters to hide from the
  1822.           "CHDIR" and "GETDIR" calls; normally set to 2 to hide the
  1823.           drive letter and colon, SUBST, JOIN, and networks change it
  1824.           so that only the appropriate portion of the true path is
  1825.           visible to the user
  1826. ---DOS 4+ ---
  1827.  51h    BYTE    (DOS 4 only, remote drives) device type
  1828.         04h network drive
  1829.  52h    DWORD    pointer to IFS driver (DOS 4) or redirector block (DOS 5+) for
  1830.           this drive, 00000000h if native DOS
  1831.  56h    WORD    available for use by IFS driver
  1832. Notes:    the path for invalid drives is normally set to X:\, but may be empty
  1833.       after JOIN x: /D in DR-DOS 5.0 or NET USE x: /D in older LAN versions
  1834.     normally, only one of bits 13&12 may be set together with bit 14, but
  1835.       DR-DOS 5.0 uses other combinations for bits 15-12: 0111 JOIN,
  1836.       0001 SUBST, 0101 ASSIGN (see #0856)
  1837.     Windows for Workgroups 3.11 network sets the path to the local
  1838.       drive and directory even for network drives; in that case the
  1839.       UNC form \\SERVER\SHARE can be obtained with INT 21/AX=5F02h
  1840.       or INT 21/AX=5F46h
  1841. SeeAlso: #0856
  1842.  
  1843. Format of DR-DOS 5.0-6.0 current directory structure entry (array):
  1844. Offset    Size    Description    (Table 0856)
  1845.  00h 67 BYTEs    ASCIZ pathname of actual root directory for this logical drive
  1846.  43h    WORD    drive attributes
  1847.         1000h SUBSTed drive
  1848.         3000h??? JOINed drive
  1849.         4000h physical drive
  1850.         5000h ASSIGNed drive
  1851.         7000h JOINed drive
  1852.         8000h network drive
  1853.  45h    BYTE    physical drive number (0=A:) if this logical drive is valid
  1854.  46h    BYTE    ??? apparently flags for JOIN and ASSIGN
  1855.  47h    WORD    cluster number of start of parent directory (0000h = root)
  1856.  49h    WORD    entry number of current directory in parent directory
  1857.  4Bh    WORD    cluster number of start of current directory
  1858.  4Dh    WORD    used for media change detection (details not available)
  1859.  4Fh    WORD    cluster number of SUBST/JOIN "root" directory
  1860.         0000h if physical root directory
  1861. SeeAlso: #0855
  1862.  
  1863. Format of Windows NT Current Directory Structure (CDS) (array):
  1864. Offset    Size    Description    (Table 0857)
  1865.  00h 67 BYTEs    ASCIZ path in form X:\ (does not show either current directory
  1866.           or network path)
  1867.  43h  4 BYTEs    ???
  1868. Note:    the WinNT CDS contains only as many entries as there are local drives,
  1869.       not LASTDRIVE entries.
  1870.  
  1871. Format of DOS device driver header:
  1872. Offset    Size    Description    (Table 0858)
  1873.  00h    DWORD    pointer to next driver, offset=FFFFh if last driver
  1874.  04h    WORD    device attributes (see #0859,#0860)
  1875.  06h    WORD    device strategy entry point
  1876.         call with ES:BX -> request header
  1877.           (see #1382 at INT 2F/AX=0802h)
  1878.  08h    WORD    device interrupt entry point
  1879. ---character device---
  1880.  0Ah  8 BYTEs    blank-padded character device name
  1881. ---block device---
  1882.  0Ah    BYTE    number of subunits (drives) supported by driver
  1883.  0Bh  7 BYTEs    normally unused; sometimes contains signature to indicate
  1884.           specific drivers:
  1885.         "GFS    "   LapLink III device driver DD.BIN
  1886.         "STAC-CD"   Stacker/Stacker Anywhere (see AX=4404h"Stacker")
  1887.         "SIDExxx"   PCMCIA driver ATADRV.EXE (see AX=440Dh)
  1888.         "$PCMATA"   PCMCIA driver PCMATA.SYS (see AX=440Dh)
  1889.         "DSKREET"   NortonUtils v5+ Diskreet (see INT 2F/AX=FE00h)
  1890. ---
  1891.  12h    WORD    (CD-ROM driver) reserved, must be 0000h
  1892.         appears to be another device chain
  1893.  14h    BYTE    (CD-ROM driver) drive letter (must initially be 00h)
  1894.  15h    BYTE    (CD-ROM driver) number of units
  1895.  16h  6 BYTEs    (CD-ROM driver) signature 'MSCDnn' where 'nn' is version
  1896.             (currently '00')
  1897. SeeAlso: #1341 at INT 25/AX=CDCDh,#1557 at INT 2F/AX=5600h
  1898.  
  1899. Bitfields for device attributes (character device):
  1900. Bit(s)    Description    (Table 0859)
  1901.  15    set (indicates character device)
  1902.  14    IOCTL supported (see AH=44h)
  1903.  13    (DOS 3+) output until busy supported
  1904.  12    reserved
  1905.  11    (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  1906.  10-8    reserved
  1907.  7    (DOS 5+) Generic IOCTL check call supported (driver command 19h)
  1908.     (see AX=4410h,AX=4411h)
  1909.  6    (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
  1910.     (see AX=440Ch,AX=440Dh)
  1911.  5    reserved
  1912.  4    device is special (use INT 29 "fast console output")
  1913.  3    device is CLOCK$ (all reads/writes use transfer record described
  1914.       below)
  1915.  2    device is NUL
  1916.  1    device is standard output
  1917.  0    device is standard input
  1918. Note:    for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
  1919.       version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
  1920.       010 = European DOS 4.0)
  1921. SeeAlso: #0860,#0858
  1922.  
  1923. Bitfields for device attributes (block device):
  1924. Bit(s)    Description    (Table 0860)
  1925.  15    clear (indicates block device)
  1926.  14    IOCTL supported
  1927.  13    non-IBM format
  1928.  12    network device (device is remote)
  1929.  11    (DOS 3+) OPEN/CLOSE/RemMedia calls supported
  1930.  10    reserved
  1931.  9    direct I/O not allowed??? (set by DOS 3.3 DRIVER.SYS for "new" drives)
  1932.  8    ??? set by DOS 3.3 DRIVER.SYS for "new" drives
  1933.  7    (DOS 5+) Generic IOCTL check call supported (driver command 19h)
  1934.     (see AX=4410h,AX=4411h)
  1935.  6    (DOS 3.2+) Generic IOCTL call supported (driver command 13h)
  1936.     implies support for commands 17h and 18h
  1937.       (see AX=440Ch,AX=440Dh,AX=440Eh,AX=440Fh)
  1938.  5-2    reserved
  1939.  1    driver supports 32-bit sector addressing (DOS 3.31+)
  1940.  0     reserved
  1941. Note:    for European MS-DOS 4.0, bit 11 also indicates that bits 8-6 contain a
  1942.       version code (000 = DOS 3.0,3.1; 001 = DOS 3.2;
  1943.       010 = European DOS 4.0)
  1944. SeeAlso: #0859,#0858
  1945.  
  1946. Format of DOS 2.x disk buffer:
  1947. Offset    Size    Description    (Table 0861)
  1948.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  1949.         least-recently used buffer is first in chain
  1950.  04h    BYTE    drive (0=A, 1=B, etc), FFh if not in use
  1951.  05h  3 BYTEs    unused??? (seems always to be 00h 00h 01h)
  1952.  08h    WORD    logical sector number
  1953.  0Ah    BYTE    number of copies to write (1 for non-FAT sectors)
  1954.  0Bh    BYTE    sector offset between copies if multiple copies to be written
  1955.  0Ch    DWORD    pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
  1956.  10h        buffered data
  1957. SeeAlso: #0862,#0864,#0865,#0867
  1958.  
  1959. Format of DOS 3.x disk buffer:
  1960. Offset    Size    Description    (Table 0862)
  1961.  00h    DWORD    pointer to next disk buffer, offset = FFFFh if last
  1962.         least-recently used buffer is first in chain
  1963.  04h    BYTE    drive (0=A,1=B, etc), FFh if not in use
  1964.  05h    BYTE    buffer flags (see #0863)
  1965.  06h    WORD    logical sector number
  1966.  08h    BYTE    number of copies to write (1 for non-FAT sectors)
  1967.  09h    BYTE    sector offset between copies if multiple copies to be written
  1968.  0Ah    DWORD    pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
  1969.  0Eh    WORD    unused??? (almost always 0)
  1970.  10h        buffered data
  1971. SeeAlso: #0861,#0864,#0865,#0867
  1972.  
  1973. Bitfields for DOS 3.x disk buffer flags:
  1974. Bit(s)    Description    (Table 0863)
  1975.  7    ???
  1976.  6    buffer dirty
  1977.  5    buffer has been referenced
  1978.  4    ???
  1979.  3    sector in data area
  1980.  2    sector in a directory, either root or subdirectory
  1981.  1    sector in FAT
  1982.  0    boot sector??? (guess)
  1983. SeeAlso: #0868
  1984.  
  1985. Format of DOS 4.00 (pre UR 25066) disk buffer info:
  1986. Offset    Size    Description    (Table 0864)
  1987.  00h    DWORD    pointer to array of disk buffer hash chain heads (see #0866)
  1988.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  1989.  06h    DWORD    pointer to lookahead buffer, zero if not present
  1990.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  1991.  0Ch    BYTE    00h if buffers in EMS (/X), FFh if not
  1992.  0Dh    WORD    EMS handle for buffers, zero if not in EMS
  1993.  0Fh    WORD    EMS physical page number used for buffers (usually 255)
  1994.  11h    WORD    ??? seems always to be 0001h
  1995.  13h    WORD    segment of EMS physical page frame
  1996.  15h    WORD    ??? seems always to be zero
  1997.  17h  4 WORDs    EMS partial page mapping information???
  1998. SeeAlso: #0861,#0862,#0865,#0869
  1999.  
  2000. Format of DOS 4.01 (from UR 25066 Corrctive Services Disk on) disk buffer info:
  2001. Offset    Size    Description    (Table 0865)
  2002.  00h    DWORD    pointer to array of disk buffer hash chain heads (see #0866)
  2003.  04h    WORD    number of disk buffer hash chains (referred to as NDBCH below)
  2004.  06h    DWORD    pointer to lookahead buffer, zero if not present
  2005.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  2006.  0Ch    BYTE    01h, possibly to distinguish from pre-UR 25066 format
  2007.  0Dh    WORD    ??? EMS segment for BUFFERS (only with /XD)
  2008.  0Fh    WORD    ??? EMS physical page number of EMS seg above (only with /XD)
  2009.  11h    WORD    ??? EMS segment for ??? (only with /XD)
  2010.  13h    WORD    ??? EMS physical page number of above (only with /XD)
  2011.  15h    BYTE    ??? number of EMS page frames present (only with /XD)
  2012.  16h    WORD    segment of one-sector workspace buffer allocated in main memory
  2013.           if BUFFERS/XS or /XD options in effect, possibly to avoid DMA
  2014.           into EMS
  2015.  18h    WORD    EMS handle for buffers, zero if not in EMS
  2016.  1Ah    WORD    EMS physical page number used for buffers (usually 255)
  2017.  1Ch    WORD    ??? appears always to be 0001h
  2018.  1Eh    WORD    segment of EMS physical page frame
  2019.  20h    WORD    ??? appears always to be zero
  2020.  22h    BYTE    00h if /XS, 01h if /XD, FFh if BUFFERS not in EMS
  2021. SeeAlso: #0861,#0862,#0864,#0869
  2022.  
  2023. Format of DOS 4.x disk buffer hash chain head (array, one entry per chain):
  2024. Offset    Size    Description    (Table 0866)
  2025.  00h    WORD    EMS logical page number in which chain is resident, -1 if not
  2026.           in EMS
  2027.  02h    DWORD    pointer to least recently used buffer header.  All buffers on
  2028.           this chain are in the same segment.
  2029.  06h    BYTE    number of dirty buffers on this chain
  2030.  07h    BYTE    reserved (00h)
  2031. Notes:    buffered disk sectors are assigned to chain N where N is the sector's
  2032.       address modulo NDBCH,     0 <= N <= NDBCH-1
  2033.     each chain resides completely within one EMS page
  2034.     this structure is in main memory even if buffers are in EMS
  2035.  
  2036. Format of DOS 4.0-6.0 disk buffer:
  2037. Offset    Size    Description    (Table 0867)
  2038.  00h    WORD    forward ptr, offset only, to next least recently used buffer
  2039.  02h    WORD    backward pointer, offset only
  2040.  04h    BYTE    drive (0=A,1=B, etc) if bit 7 clear
  2041.         SFT index if bit 7 set
  2042.         FFh if not in use
  2043.  05h    BYTE    buffer flags (see #0868)
  2044.  06h    DWORD    logical sector number (local buffers only)
  2045.  0Ah    BYTE    number of copies to write
  2046.         for FAT sectors, same as number of FATs
  2047.         for data and directory sectors, usually 1
  2048.  0Bh    WORD    offset in sectors between copies to write for FAT sectors
  2049.  0Dh    DWORD    pointer to DOS Drive Parameter Block (see #0620 at AH=32h)
  2050.  11h    WORD    size of data in buffer if remote buffer (see flags above)
  2051.  13h    BYTE    reserved (padding)
  2052.  14h        buffered data
  2053. Note:    for DOS 4.x, all buffered sectors which have the same hash value
  2054.       (computed as the sum of high and low words of the logical sector
  2055.       number divided by the number of disk buffer chains) are on the same
  2056.       doubly-linked circular chain; for DOS 5+, only a single circular
  2057.       chain exists.
  2058.     the links consist of offset addresses only, the segment being the same
  2059.       for all buffers in the chain.
  2060. SeeAlso: #0861,#0862,#0864
  2061.  
  2062. Bitfields for DOS 4.0-6.0 disk buffer flags:
  2063. Bit(s)    Description    (Table 0868)
  2064.  7    remote buffer
  2065.  6    buffer dirty
  2066.  5    buffer has been referenced (reserved in DOS 5+)
  2067.  4    search data buffer (only valid if remote buffer)
  2068.  3    sector in data area
  2069.  2    sector in a directory, either root or subdirectory
  2070.  1    sector in FAT
  2071.  0    reserved
  2072. SeeAlso: #0863
  2073.  
  2074. Format of DOS 5.0-6.0 disk buffer info:
  2075. Offset    Size    Description    (Table 0869)
  2076.  00h    DWORD    pointer to least-recently-used buffer header (may be in HMA)
  2077.         (see #0867)
  2078.  04h    WORD    number of dirty disk buffers
  2079.  06h    DWORD    pointer to lookahead buffer, zero if not present
  2080.  0Ah    WORD    number of lookahead sectors, else zero (the y in BUFFERS=x,y)
  2081.  0Ch    BYTE    buffer location
  2082.         00h base memory, no workspace buffer
  2083.         01h HMA, workspace buffer in base memory
  2084.  0Dh    DWORD    pointer to one-segment workspace buffer in base memory
  2085.  11h  3 BYTEs    unused
  2086.  14h    WORD    ???
  2087.  16h    BYTE    flag: INT 24 fail while making an I/O status call
  2088.  17h    BYTE    temp storage for user memory allocation strategy during EXEC
  2089.  18h    BYTE    counter: number of INT 21 calls for which A20 is off
  2090.  19h    BYTE    bit flags
  2091.         bit 0: ???
  2092.         bit 1: SWITCHES=/W specified in CONFIG.SYS (don't load
  2093.             WINA20.SYS when MS Windows 3.0 starts)
  2094.         bit 2: in EXEC state (INT 21/AX=4B05h)
  2095.  1Ah    WORD    offset of unpack code start (used only during INT 21/AX=4B05h)
  2096.  1Ch    BYTE    bit 0 set iff UMB MCB chain linked to normal MCB chain
  2097.  1Dh    WORD    minimum paragraphs of memory required by program being EXECed
  2098.  1Fh    WORD    segment of first MCB in upper memory blocks or FFFFh if DOS
  2099.           memory chain in base 640K only (first UMB MCB usually at
  2100.           9FFFh, locking out video memory with a DOS-owned memory
  2101.           block)
  2102.         the MCB this word points at contains a valid link into high
  2103.           memory even if it is marked with a 'Z' indicating the last
  2104.           memory block
  2105.  21h    WORD    paragraph from which to start scanning during memory allocation
  2106. SeeAlso: #0864,#0865
  2107.  
  2108. (Table 0870)
  2109. Call IFS utility function entry point with:
  2110.     AH = 20h miscellaneous functions
  2111.         AL = 00h get date
  2112.         Return: CX = year
  2113.             DH = month
  2114.             DL = day
  2115.         AL = 01h get process ID and computer ID
  2116.         Return: BX = current PSP segment
  2117.             DX = active network machine number
  2118.         AL = 05h get file system info
  2119.         ES:DI -> 16-byte info buffer
  2120.         Return: buffer filled
  2121.             Offset    Size    Description
  2122.              00h  2 BYTEs    unused
  2123.              02h    WORD    number of SFTs (actually counts only
  2124.                     the first two file table arrays)
  2125.              04h    WORD    number of FCB table entries
  2126.              06h    WORD    number of proctected FCBs
  2127.              08h  6 BYTEs    unused
  2128.              0Eh    WORD    largest sector size supported
  2129.         AL = 06h get machine name
  2130.         ES:DI -> 18-byte buffer for name
  2131.         Return: buffer filled with name starting at offset 02h
  2132.         AL = 08h get sharing retry count
  2133.         Return: BX = sharing retry count
  2134.         AL = other
  2135.         Return: CF set
  2136.     AH = 21h get redirection state
  2137.         BH = type (03h disk, 04h printer)
  2138.         Return: BH = state (00h off, 01h on)
  2139.     AH = 22h ??? some sort of time calculation
  2140.         AL = 00h ???
  2141.             nonzero ???
  2142.     AH = 23h ??? some sort of time calculation
  2143.     AH = 24h compare filenames
  2144.         DS:SI -> first ASCIZ filename
  2145.         ES:DI -> second ASCIZ filename
  2146.         Return: ZF set if files are same ignoring case and / vs \
  2147.     AH = 25h normalize filename
  2148.         DS:SI -> ASCIZ filename
  2149.         ES:DI -> buffer for result
  2150.         Return: filename uppercased, forward slashes changed to backslashes
  2151.     AH = 26h get DOS stack
  2152.         Return: DS:SI -> top of stack
  2153.             CX = size of stack in bytes
  2154.     AH = 27h increment InDOS flag
  2155.     AH = 28h decrement InDOS flag
  2156. Note:    IFS drivers which do not wish to implement functions 20h or 24h-28h may
  2157.       pass them on to the default handler pointed at by [LoL+37h]
  2158. SeeAlso: #0871,#0872
  2159.  
  2160. Format of IFS driver list:
  2161. Offset    Size    Description    (Table 0871)
  2162.  00h    DWORD    pointer to next driver header
  2163.  04h  8 BYTEs    IFS driver name (blank padded), as used by FILESYS command
  2164.  0Ch  4 BYTEs    ???
  2165.  10h    DWORD    pointer to IFS utility function entry point (see #0870)
  2166.         call with ES:BX -> IFS request (see #0872)
  2167.  14h    WORD    offset in header's segment of driver entry point
  2168.     ???
  2169. SeeAlso: #0870,#0872
  2170.  
  2171. Format of IFS request block:
  2172. Offset    Size    Description    (Table 0872)
  2173.  00h    WORD    total size in bytes of request
  2174.  02h    BYTE    class of request
  2175.         02h ???
  2176.         03h redirection
  2177.         04h ???
  2178.         05h file access
  2179.         06h convert error code to string
  2180.         07h ???
  2181.  03h    WORD    returned DOS error code
  2182.  05h    BYTE    IFS driver exit status
  2183.         00h success
  2184.         01h ???
  2185.         02h ???
  2186.         03h ???
  2187.         04h ???
  2188.         FFh internal failure
  2189.  06h 16 BYTEs    ???
  2190. ---request class 02h---
  2191.  16h    BYTE    function code
  2192.         04h ???
  2193.  17h    BYTE    unused???
  2194.  18h    DWORD    pointer to ???
  2195.  1Ch    DWORD    pointer to ???
  2196.  20h  2 BYTEs    ???
  2197. ---request class 03h---
  2198.  16h    BYTE    function code
  2199.  17h    BYTE    ???
  2200.  18h    DWORD    pointer to ???
  2201.  1Ch    DWORD    pointer to ???
  2202.  22h    WORD    returned ???
  2203.  24h    WORD    returned ???
  2204.  26h    WORD    returned ???
  2205.  28h    BYTE    returned ???
  2206.  29h    BYTE    unused???
  2207. ---request class 04h---
  2208.  16h    DWORD    pointer to ???
  2209.  1Ah    DWORD    pointer to ???
  2210. ---request class 05h---
  2211.  16h    BYTE    function code
  2212.         01h flush disk buffers
  2213.         02h get disk space
  2214.         03h MKDIR
  2215.         04h RMDIR
  2216.         05h CHDIR
  2217.         06h delete file
  2218.         07h rename file
  2219.         08h search directory
  2220.         09h file open/create
  2221.         0Ah LSEEK
  2222.         0Bh read from file
  2223.         0Ch write to file
  2224.         0Dh lock region of file
  2225.         0Eh commit/close file
  2226.         0Fh get/set file attributes
  2227.         10h printer control
  2228.         11h ???
  2229.         12h process termination
  2230.         13h ???
  2231.     ---class 05h function 01h---
  2232.      17h  7 BYTEs    ???
  2233.      1Eh    DWORD    pointer to ???
  2234.      22h  4 BYTEs    ???
  2235.      26h    BYTE    ???
  2236.      27h    BYTE    ???
  2237.     ---class 05h function 02h---
  2238.      17h  7 BYTEs    ???
  2239.      1Eh    DWORD    pointer to ???
  2240.      22h  4 BYTEs    ???
  2241.      26h    WORD    returned total clusters
  2242.      28h    WORD    returned sectors per cluster
  2243.      2Ah    WORD    returned bytes per sector
  2244.      2Ch    WORD    returned available clusters
  2245.      2Eh    BYTE    returned ???
  2246.      2Fh    BYTE    ???
  2247.     ---class 05h functions 03h,04h,05h---
  2248.      17h  7 BYTEs    ???
  2249.      1Eh    DWORD    pointer to ???
  2250.      22h  4 BYTEs    ???
  2251.      26h    DWORD    pointer to directory name
  2252.     ---class 05h function 06h---
  2253.      17h  7 BYTEs    ???
  2254.      1Eh    DWORD    pointer to ???
  2255.      22h  4 BYTEs    ???
  2256.      26h    WORD    attribute mask
  2257.      28h    DWORD    pointer to filename
  2258.     ---class 05h function 07h---
  2259.      17h  7 BYTEs    ???
  2260.      1Eh    DWORD    pointer to ???
  2261.      22h  4 BYTEs    ???
  2262.      26h    WORD    attribute mask
  2263.      28h    DWORD    pointer to source filespec
  2264.      2Ch    DWORD    pointer to destination filespec
  2265.     ---class 05h function 08h---
  2266.      17h  7 BYTEs    ???
  2267.      1Eh    DWORD    pointer to ???
  2268.      22h  4 BYTEs    ???
  2269.      26h    BYTE    00h FINDFIRST
  2270.             01h FINDNEXT
  2271.      28h    DWORD    pointer to FindFirst search data + 01h if FINDNEXT
  2272.      2Ch    WORD    search attribute if FINDFIRST
  2273.      2Eh    DWORD    pointer to filespec if FINDFIRST
  2274.     ---class 05h function 09h---
  2275.      17h  7 BYTEs    ???
  2276.      1Eh    DWORD    pointer to ???
  2277.      22h    DWORD    pointer to IFS open file structure (see #0873)
  2278.      26h    WORD    ???  \ together, specify open vs. create, whether or
  2279.      28h    WORD    ???  / not to truncate
  2280.      2Ah  4 BYTEs    ???
  2281.      2Eh    DWORD    pointer to filename
  2282.      32h  4 BYTEs    ???
  2283.      36h    WORD    file attributes on call
  2284.             returned ???
  2285.      38h    WORD    returned ???
  2286.     ---class 05h function 0Ah---
  2287.      17h  7 BYTEs    ???
  2288.      1Eh    DWORD    pointer to ???
  2289.      22h    DWORD    pointer to IFS open file structure (see #0873)
  2290.      26h    BYTE    seek type (02h = from end)
  2291.      28h    DWORD    offset on call
  2292.             returned new absolute position
  2293.     ---class 05h functions 0Bh,0Ch---
  2294.      17h  7 BYTEs    ???
  2295.      1Eh    DWORD    pointer to ???
  2296.      22h    DWORD    pointer to IFS open file structure (see #0873)
  2297.      28h    WORD    number of bytes to transfer
  2298.             returned bytes actually transferred
  2299.      2Ah    DWORD    transfer address
  2300.     ---class 05h function 0Dh---
  2301.      17h  7 BYTEs    ???
  2302.      1Eh    DWORD    pointer to ???
  2303.      22h    DWORD    pointer to IFS open file structure (see #0873)
  2304.      26h    BYTE    file handle???
  2305.      27h    BYTE    unused???
  2306.      28h    WORD    ???
  2307.      2Ah    WORD    ???
  2308.      2Ch    WORD    ???
  2309.      2Eh    WORD    ???
  2310.     ---class 05h function 0Eh---
  2311.      17h  7 BYTEs    ???
  2312.      1Eh    DWORD    pointer to ???
  2313.      22h    DWORD    pointer to IFS open file structure (see #0873)
  2314.      26h    BYTE    00h commit file
  2315.             01h close file
  2316.      27h    BYTE    unused???
  2317.     ---class 05h function 0Fh---
  2318.      17h  7 BYTEs    ???
  2319.      1Eh    DWORD    pointer to ???
  2320.      22h  4 BYTEs    ???
  2321.      26h    BYTE    02h GET attributes
  2322.             03h PUT attributes
  2323.      27h    BYTE    unused???
  2324.      28h 12 BYTEs    ???
  2325.      34h    WORD    search attributes???
  2326.      36h    DWORD    pointer to filename
  2327.      3Ah    WORD    (GET) returned ???
  2328.      3Ch    WORD    (GET) returned ???
  2329.      3Eh    WORD    (GET) returned ???
  2330.      40h    WORD    (GET) returned ???
  2331.      42h    WORD    (PUT) new attributes
  2332.             (GET) returned attributes
  2333.     ---class 05h function 10h---
  2334.      17h  7 BYTEs    ???
  2335.      1Eh    DWORD    pointer to ???
  2336.      22h    DWORD    pointer to IFS open file structure (see #0873)
  2337.      26h    WORD    ???
  2338.      28h    DWORD    pointer to ???
  2339.      2Ch    WORD    ???
  2340.      2Eh    BYTE    ???
  2341.      2Fh    BYTE    subfunction
  2342.             01h get printer setup
  2343.             03h ???
  2344.             04h ???
  2345.             05h ???
  2346.             06h ???
  2347.             07h ???
  2348.             21h set printer setup
  2349.     ---class 05h function 11h---
  2350.      17h  7 BYTEs    ???
  2351.      1Eh    DWORD    pointer to ???
  2352.      22h    DWORD    pointer to IFS open file structure (see #0873)
  2353.      26h    BYTE    subfunction
  2354.      27h    BYTE    unused???
  2355.      28h    WORD    ???
  2356.      2Ah    WORD    ???
  2357.      2Ch    WORD    ???
  2358.      2Eh    BYTE    ???
  2359.      2Fh    BYTE    ???
  2360.     ---class 05h function 12h---
  2361.      17h 15 BYTEs    unused???
  2362.      26h    WORD    PSP segment
  2363.      28h    BYTE    type of process termination
  2364.      29h    BYTE    unused???
  2365.     ---class 05h function 13h---
  2366.      17h 15 BYTEs    unused???
  2367.      26h    WORD    PSP segment
  2368. ---request class 06h---
  2369.  16h    DWORD    returned pointer to string corresponding to error code at 03h
  2370.  1Ah    BYTE    returned ???
  2371.  1Bh    BYTE    unused
  2372. ---request class 07h---
  2373.  16h    DWORD    pointer to IFS open file structure (see #0873)
  2374.  1Ah    BYTE    ???
  2375.  1Bh    BYTE    unused???
  2376. SeeAlso: #0871,#0870,#0873
  2377.  
  2378. Format of IFS open file structure:
  2379. Offset    Size    Description    (Table 0873)
  2380.  00h    WORD    ???
  2381.  02h    WORD    device info word
  2382.  04h    WORD    file open mode
  2383.  06h    WORD    ???
  2384.  08h    WORD    file attributes
  2385.  0Ah    WORD    owner's network machine number
  2386.  0Ch    WORD    owner's PSP segment
  2387.  0Eh    DWORD    file size
  2388.  12h    DWORD    current offset in file
  2389.  16h    WORD    file time
  2390.  18h    WORD    file date
  2391.  1Ah 11 BYTEs    filename in FCB format
  2392.  25h    WORD    ???
  2393.  27h    WORD    hash value of SFT address
  2394.         (low word of linear address + segment&F000h)
  2395.  29h  3 WORDs    network info from SFT
  2396.  2Fh    WORD    ???
  2397.  
  2398. Format of one item in DOS 4+ list of special program names:
  2399. Offset    Size    Description    (Table 0874)
  2400.  00h    BYTE    length of name (00h = end of list)
  2401.  01h  N BYTEs    name in format name.ext
  2402.  N    2 BYTEs    DOS version to return for program (major,minor)
  2403.         (see AH=30h,INT 2F/AX=122Fh)
  2404. ---DOS 4 only---
  2405.  N+2    BYTE    number of times to return fake version number (FFh = always)
  2406. Note:    if the name of the executable for the program making the DOS "get
  2407.       version" call matches one of the names in this list, DOS returns the
  2408.       specified version rather than the true version number
  2409. --------v-215252-----------------------------
  2410. INT 21 - VIRUS - "516"/"Leapfrog" - INSTALLATION CHECK
  2411.     AX = 5252h
  2412. Return: BX = FFEEh if resident
  2413. SeeAlso: AX=4BFFh"Cascade",AX=58CCh
  2414. --------D-2153-------------------------------
  2415. INT 21 - DOS 2+ internal - TRANSLATE BIOS PARAMETER BLOCK TO DRIVE PARAM BLOCK
  2416.     AH = 53h
  2417.     DS:SI -> BIOS Parameter Block (see #0875)
  2418.     ES:BP -> buffer for Drive Parameter Block (see #0620 at AH=32h)
  2419. Return: ES:BP buffer filled
  2420. Notes:    for DOS 3+, the cluster at which to start searching is set to 0000h
  2421.       and the number of free clusters is set to FFFFh (unknown)
  2422.     if the number of sectors per cluster is set to zero, MS-DOS will hang
  2423.       at startup because it computes the internally-used shift count by
  2424.       shifting this value right until the carry flag is set; since this
  2425.       will never happen when the field is zero, MS-DOS hangs
  2426.  
  2427. Format of BIOS Parameter Block:
  2428. Offset    Size    Description    (Table 0875)
  2429.  00h    WORD    number of bytes per sector
  2430.  02h    BYTE    number of sectors per cluster
  2431.  03h    WORD    number of reserved sectors at start of disk
  2432.  05h    BYTE    number of FATs
  2433.  06h    WORD    number of entries in root directory
  2434.  08h    WORD    total number of sectors
  2435.         for DOS 4+, set to zero if partition >32M, then set DWORD at
  2436.           15h to actual number of sectors
  2437.  0Ah    BYTE    media ID byte (see #0581)
  2438.  0Bh    WORD    number of sectors per FAT
  2439. ---DOS 2.13---
  2440.  0Dh    WORD    number of sectors per track
  2441.  0Fh    WORD    number of heads
  2442.  11h    WORD    number of hidden sectors
  2443. ---DOS 3+---
  2444.  0Dh    WORD    number of sectors per track
  2445.  0Fh    WORD    number of heads
  2446.  11h    DWORD    number of hidden sectors
  2447.  15h 11 BYTEs    reserved
  2448. ---DOS 4+ ---
  2449.  15h    DWORD    total number of sectors if word at 08h contains zero
  2450.  19h  6 BYTEs    ???
  2451.  1Fh    WORD    number of cylinders
  2452.  21h    BYTE    device type
  2453.  22h    WORD    device attributes (removable or not, etc)
  2454. ---DR-DOS 5+ ---
  2455.  15h    DWORD    total number of sectors if word at 08h contains zero
  2456.  19h  6 BYTEs    reserved
  2457. ---European MS-DOS 4.00---
  2458.  15h    DWORD    total number of sectors if word at 08h contains zero
  2459.         (however, this DOS does not actually implement >32M partitions)
  2460. SeeAlso: #0620
  2461. --------D-2154-------------------------------
  2462. INT 21 - DOS 2+ - GET VERIFY FLAG
  2463.     AH = 54h
  2464. Return: AL = verify flag
  2465.         00h off
  2466.         01h on (all disk writes verified after writing)
  2467. SeeAlso: AH=2Eh
  2468. --------D-2155-------------------------------
  2469. INT 21 - DOS 2+ internal - CREATE CHILD PSP
  2470.     AH = 55h
  2471.     DX = segment at which to create new PSP
  2472.     SI = (DOS 3+) value to place in memory size field at DX:[0002h]
  2473. Return: CF clear if successful
  2474. Notes:    creates a "child" PSP rather than making an exact copy of the current
  2475.       PSP; the new PSP's parent pointer is set to the current PSP and the
  2476.       reference count for each inherited file is incremented
  2477.     (DOS 2+) sets current PSP to DX
  2478.     (DOS 3+) marks "no inherit" file handles as closed in child PSP
  2479. SeeAlso: AH=26h,AH=50h
  2480. --------D-2156-------------------------------
  2481. INT 21 - DOS 2+ - "RENAME" - RENAME FILE
  2482.     AH = 56h
  2483.     DS:DX -> ASCIZ filename of existing file (no wildcards, but see below)
  2484.     ES:DI -> ASCIZ new filename (no wildcards)
  2485.     CL = attribute mask (server call only, see below)
  2486. Return: CF clear if successful
  2487.     CF set on error
  2488.         AX = error code (02h,03h,05h,11h) (see #0885)
  2489. Notes:    allows move between directories on same logical volume
  2490.     this function does not set the archive attribute
  2491.       (see #0643 at AX=4301h), which results in incremental backups not
  2492.       backing up the file under its new name
  2493.     open files should not be renamed
  2494.     (DOS 3+) allows renaming of directories
  2495.     (DOS 3.1+) wildcards are allowed if invoked via AX=5D00h, in which case
  2496.       error 12h (no more files) is returned on success, and both source and
  2497.       destination specs must be canonical (as returned by AH=60h).
  2498.       Wildcards in the destination are replaced by the corresponding char
  2499.       of each source file being renamed.  Under DOS 3.x, the call will fail
  2500.       if the destination wildcard is *.* or equivalent; under DR-DOS 5.0,
  2501.       the call will fail if any wildcards are used.     When invoked via
  2502.       AX=5D00h, only those files matching the attribute mask in CL are
  2503.       renamed.
  2504.     under the FlashTek X-32 DOS extender, the old-name pointer is in DS:EDX
  2505.       and the new-name pointer is in ES:EDI (DS must equal ES)
  2506.     (DOS 2.x only) this function renames file by creating a new directory
  2507.       entry with the new name,then marking the old entry deleted
  2508. BUG:    under DR-DOS 3.41, this function will generate a new directory entry
  2509.       with the new name (including any wildcards) which can only be removed
  2510.       with a sector editor when invoked via AX=5D00h
  2511. SeeAlso: AH=17h,AX=4301h,AX=5D00h,AH=60h,AH=71h
  2512. --------D-215700-----------------------------
  2513. INT 21 - DOS 2+ - GET FILE'S DATE AND TIME
  2514.     AX = 5700h
  2515.     BX = file handle
  2516. Return: CF clear if successful
  2517.         CX = file's time (see #0876)
  2518.         DX = file's date (see #0877)
  2519.     CF set on error
  2520.         AX = error code (01h,06h) (see #0885)
  2521. Note:    under DR-DOS 3.41 and 5.0, this function returns 0 (no date/time) for
  2522.       character devices; MS-DOS returns date and time of opening
  2523. SeeAlso: AX=5701h
  2524.  
  2525. Bitfields for file time:
  2526. Bit(s)    Description    (Table 0876)
  2527.  15-11    hours (0-23)
  2528.  10-5    minutes
  2529.  4-0    seconds/2
  2530.  
  2531. Bitfields for file date:
  2532. Bit(s)    Description    (Table 0877)
  2533.  15-9    year - 1980
  2534.  8-5    month
  2535.  4-0    day
  2536. --------D-215701-----------------------------
  2537. INT 21 - DOS 2+ - SET FILE'S DATE AND TIME
  2538.     AX = 5701h
  2539.     BX = file handle
  2540.     CX = new time (see #0876)
  2541.     DX = new date (see #0877)
  2542. Return: CF clear if successful
  2543.     CF set on error
  2544.         AX = error code (01h,06h) (see #0885)
  2545. SeeAlso: AX=5700h
  2546. --------D-215702-----------------------------
  2547. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTES FOR FILE
  2548.     AX = 5702h
  2549.     BX = file handle
  2550.     CX = size of result buffer or 0000h
  2551.     DS:SI -> EAP list (see #0878)
  2552.     ES:DI -> buffer for returned EAV list (see #0881)
  2553. Return: CF clear if successful
  2554.         CX = size of returned data
  2555.     CF set on error
  2556.         AX = error code (see #0885)
  2557. Desc:    get the current value of one or more extended attributes
  2558. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  2559.       returned, only the amount of data which is available
  2560.     the default DOS 4 behavior is to return a single word of 0000h (no
  2561.       structures) in the result buffer if CX>=0002h on entry
  2562. SeeAlso: AX=5703h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  2563.  
  2564. Format of EAP (extended attribute properties) list:
  2565. Offset    Size    Description    (Table 0878)
  2566.  00h    WORD    number of EAP structures following
  2567.  02h    var    array of EAP structures (see #0879)
  2568. SeeAlso: #0881
  2569.  
  2570. Format of EAP (extended attribute property) structure:
  2571. Offset    Size    Description    (Table 0879)
  2572.  00h    BYTE    attribute type
  2573.         01h boolean (either 00h or 01h)
  2574.         02h number (BYTE, WORD, or DWORD)
  2575.         03h string
  2576.         04h date stamp
  2577.         05h time stamp
  2578.  01h    WORD    EAP flags (see #0880)
  2579.  03h    BYTE    size of reference string (name)
  2580.  04h  N BYTEs    reference string
  2581.  
  2582. Bitfields for EAP flags:
  2583. Bit(s)    Description    (Table 0880)
  2584.  12    unchangeable
  2585.  13    ignore
  2586.  14    unchangeable
  2587.  15    used by COMMAND.COM for code page, but not understood by ATTRIB
  2588.  
  2589. Format of EAV (extended attribute value) list:
  2590. Offset    Size    Description    (Table 0881)
  2591.  00h    WORD    number of EAV structures following
  2592.  02h    var    array of Extended Attribute Value structures (see #0882)
  2593. SeeAlso: #0878
  2594.  
  2595. Format of Extended Attribute Value structures:
  2596. Offset    Size    Description    (Table 0882)
  2597.  00h  4 BYTEs    ???
  2598.  04h    BYTE    size of reference string
  2599.  05h    WORD    size of value
  2600.  07h    var    reference string
  2601.     var    value
  2602. --------O-215702-----------------------------
  2603. INT 21 - OS/2 v1.1+ Family API - DosQFileInfo
  2604.     AX = 5702h
  2605.     BX = file handle
  2606.     CX = size of buffer for information
  2607.     DX = level of information
  2608.     ES:DI -> buffer for information
  2609. Return: CF clear if successful
  2610.     CF set on error
  2611.         AX = error code
  2612. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  2613. --------O-215702BXFFFF-----------------------
  2614. INT 21 - OS/2 v1.1+ Compatibility Box Family API - DosQPathInfo
  2615.     AX = 5702h
  2616.     BX = FFFFh
  2617.     CX = size of buffer for information
  2618.     DX = level of information (0002h)
  2619.     DS:SI -> filename
  2620.     ES:DI -> buffer for FAPI path information (see #0883)
  2621. Return: CF clear if successful
  2622.         AL = 00h
  2623.     CF set on error
  2624.         AX = error code
  2625. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  2626.  
  2627. Format of FAPI path information:
  2628. Offset    Size    Description    (Table 0883)
  2629.  00h 22 BYTEs    ???
  2630.  16h    DWORD    extended attribute size (none present if less than 5)
  2631. --------D-215703-----------------------------
  2632. INT 21 - DOS 4.x only - GET EXTENDED ATTRIBUTE PROPERTIES
  2633.     AX = 5703h
  2634.     BX = file handle
  2635.     CX = size of result buffer or 0000h
  2636.     ES:DI -> result buffer
  2637. Return: CF clear if successful
  2638.         CX = size of returned data
  2639.     CF set on error
  2640.         AX = error code (see #0885)
  2641.     ES:DI -> zero word (DOS 4.0) if CX >= 2 on entry
  2642. Desc:    get a list of the extended attributes which are defined for the
  2643.       specified file
  2644. Notes:    if CX=0000h on entry, ES:DI is ignored and no data is actually
  2645.       returned, only the amount of data which is available
  2646.     the default DOS 4 behavior is to return a trivial EAP list consisting
  2647.       of the single word 0000h (no EAP structures) if CX>=0002h on entry
  2648. SeeAlso: AX=5702h,AX=5704h,AH=6Eh,INT 2F/AX=112Dh
  2649. --------O-215703-----------------------------
  2650. INT 21 - OS/2 v1.1+ Family API - DosSetFileInfo
  2651.     AX = 5703h
  2652.     BX = file handle
  2653.     CX = size of information buffer
  2654.     DX = level of information
  2655.     ES:DI -> information buffer
  2656. Return: CF clear if successful
  2657.     CF set on error
  2658.         AX = error code
  2659. SeeAlso: AX=5702h"OS/2",AX=5703h/BX=FFFFh
  2660. --------O-215703BXFFFF-----------------------
  2661. INT 21 - OS/2 v1.1+ Family API - DosSetPathInfo
  2662.     AX = 5703h
  2663.     BX = FFFFh
  2664.     CX = size of information buffer
  2665.     DX = level of information
  2666.     DS:SI -> filename
  2667.     ES:DI -> information buffer
  2668. Return: CF clear if successful
  2669.     CF set on error
  2670.         AX = error code
  2671. SeeAlso: AX=5702h/BX=FFFFh,AX=5703h"OS/2"
  2672. --------D-215704-----------------------------
  2673. INT 21 - DOS 4.x only - SET EXTENDED ATTRIBUTES
  2674.     AX = 5704h
  2675.     BX = file handle
  2676.     ES:DI -> EAV list (see #0881)
  2677. Return: CF clear if successful
  2678.     CF set on error
  2679.         AX = error code (see #0885)
  2680. Note:    the default DOS 4 behavior is to do nothing and return successfully
  2681. SeeAlso: AX=5702h,AX=5703h,INT 2F/AX=112Dh
  2682. ----------215757BX5757-----------------------
  2683. INT 21 U - IBM Genie - Resident Manager - INSTALLATION CHECK
  2684.     AX = 5757h
  2685.     BX = 5757h
  2686. Return: AX = 0000h if installed
  2687.         BX = ???
  2688.         DX = ???
  2689.         DS:SI -> list of 27 DWORD entry point addresses
  2690. Program: IBM Genie is a set of utility TSRs by Helix Software
  2691. Note:    other functions possible if BX <> 5757h, but details not yet available
  2692. ----------215758-----------------------------
  2693. INT 21 U - Headroom - API
  2694.     AX = 5758h
  2695.     BL = function
  2696.         00h ???
  2697.         01h get Headroom location
  2698.         Return: CF clear if installed
  2699.                 AX = PSP segment of Headroom TSR
  2700.                 BX = paragraphs of memory used by Headroom
  2701.             CF set if not (normal DOS return)
  2702.         Note:    this function is also used as an installation check
  2703.         02h get INT 21 handler
  2704.         Return: CF clear
  2705.             ES:BX -> Headroom's INT 21 handler
  2706.         Note: also sets unknown flag
  2707.         03h launch application???
  2708.         DS:SI -> 233-byte application record
  2709.         Return: ???
  2710.         04h ???
  2711.         ???
  2712.         Return: CF clear
  2713.         05h get swap directory
  2714.         Return: CF clear
  2715.             DX:AX -> ASCIZ swap directory name
  2716.         06h ???
  2717.         DX = ???
  2718.         Return: CF clear
  2719.         07h ???
  2720.         08h ???
  2721.         09h get current application
  2722.         Return: BX = application number
  2723.         0Ah ???
  2724.         DX = application number
  2725.         DS:SI = ???
  2726.         Return: ???
  2727.         0Bh ???
  2728.         0Ch ???
  2729.         DX = application number
  2730.         ???
  2731.         Return: ???
  2732.         0Dh ???
  2733.         DX = application number
  2734.         ???
  2735.         Return: ???
  2736.         0Eh get ???
  2737.         Return: CF clear
  2738.             AX = ???
  2739.         0Fh set ??? flag
  2740.         10h clear ??? flag
  2741.         11h find application by name
  2742.         DS:SI -> ASCIZ application name
  2743.         Return: CF clear
  2744.             AX = application number or FFFFh if not loaded
  2745.         12h ???
  2746.         DX = application number
  2747.         Return: CF clear
  2748.             ???
  2749.         13h ???
  2750.         Return: CF clear
  2751.         14h ???
  2752.         same as function 13h
  2753.         15h set ???
  2754.         DX = ???
  2755.         16h get ???
  2756.         Return: AX = ??? set by function 15h
  2757.         17h get ???
  2758.         Return: BX = ???
  2759.             CX = ??? (may be pointer in BX:CX)
  2760.         18h BUG: branches incorrectly due to fencepost error
  2761. Program: Headroom is a TSR/task switcher by Helix Software
  2762. SeeAlso: AX=4C57h,AX=5757h,INT 2F/AX=5758h
  2763. --------D-2158-------------------------------
  2764. INT 21 - DOS 2.11+ - GET OR SET MEMORY ALLOCATION STRATEGY
  2765.     AH = 58h
  2766.     AL = subfunction
  2767.         00h get allocation strategy
  2768.         Return: AX = current strategy (see #0884)
  2769.         01h set allocation strategy
  2770.         BL = new allocation strategy (see #0884)
  2771.         BH = 00h (DOS 5+)
  2772. Return: CF clear if successful
  2773.     CF set on error
  2774.         AX = error code (01h) (see #0885)
  2775. Notes:    the Set subfunction accepts any value in BL for DOS 3.x and 4.x;
  2776.       2 or greater means last fit
  2777.     the Get subfunction returns the last value set
  2778.     setting an allocation strategy involving high memory does not
  2779.       automatically link in the UMB memory chain; this must be done
  2780.       explicitly with AX=5803h in order to actually allocate high memory
  2781.     a program which changes the allocation strategy should restore it
  2782.       before terminating
  2783.     Toshiba MS-DOS v2.11 supports subfunctions 00h and 01h, as does the
  2784.       TI Professional MS-DOS v2.13
  2785.     DR-DOS 3.41 reportedly reverses subfunctions 00h and 01h
  2786. SeeAlso: AH=48h,AH=49h,AH=4Ah,INT 2F/AX=4310h,INT 67/AH=3Fh
  2787.  
  2788. (Table 0884)
  2789. Values for DOS memory allocation strategy:
  2790.  00h low memory first fit
  2791.  01h low memory best fit
  2792.  02h low memory last fit
  2793. ---DOS 5+ ---
  2794.  40h high memory first fit
  2795.  41h high memory best fit
  2796.  42h high memory last fit
  2797.  80h first fit, try high then low memory
  2798.  81h best fit, try high then low memory
  2799.  82h last fit, try high then low memory
  2800. --------D-2158-------------------------------
  2801. INT 21 - DOS 5+ - GET OR SET UMB LINK STATE
  2802.     AH = 58h
  2803.     AL = subfunction
  2804.         02h get UMB link state
  2805.         Return: AL = current link state
  2806.                 00h UMBs not part of DOS memory chain
  2807.                 01h UMBs in DOS memory chain
  2808.         03h set UMB link state
  2809.         BX = new link state
  2810.             0000h remove UMBs from DOS memory chain
  2811.             0001h add UMBs to DOS memory chain
  2812. Return: CF clear if successful
  2813.     CF set on error
  2814.         AX = error code (01h) (see #0885)
  2815. Note:    a program which changes the UMB link state should restore it before
  2816.       terminating
  2817. --------v-2158CC-----------------------------
  2818. INT 21 - VIRUS - "1067"/"Headcrash" - INSTALLATION CHECK
  2819.     AX = 58CCh
  2820. Return: CF clear if resident
  2821. SeeAlso: AX=5252h,AX=58DDh,AX=6969h
  2822. --------v-2158DD-----------------------------
  2823. INT 21 - VIRUS - "1067"/"Headcrash" - GET ORIGINAL INT 21h VECTOR
  2824.     AX = 58DDh
  2825. Return: CX = code segment of virus
  2826.     ES:BX = old INT 21h vector
  2827. SeeAlso: AX=5252h,AX=58CCh,AX=6969h
  2828. --------D-2159--BX0000-----------------------
  2829. INT 21 - DOS 3+ - GET EXTENDED ERROR INFORMATION
  2830.     AH = 59h
  2831.     BX = 0000h
  2832. Return: AX = extended error code (see #0885)
  2833.     BH = error class (see #0887)
  2834.     BL = recommended action (see #0888)
  2835.     CH = error locus (see #0889)
  2836.     ES:DI may be pointer (see #0886, error code list below)
  2837.     CL, DX, SI, BP, and DS destroyed
  2838. Notes:    functions available under DOS 2.x map the true DOS 3+ error code into
  2839.       one supported under DOS 2.x
  2840.     you should call this function to retrieve the true error code when an
  2841.       FCB or DOS 2.x call returns an error
  2842.     under DR-DOS 5.0, this function does not use any of the DOS-internal
  2843.       stacks and may thus be called at any time
  2844. SeeAlso: AH=59h/BX=0001h,AX=5D0Ah,INT 2F/AX=122Dh
  2845.  
  2846. (Table 0885)
  2847. Values for DOS extended error code:
  2848.  00h (0)   no error
  2849.  01h (1)   function number invalid
  2850.  02h (2)   file not found
  2851.  03h (3)   path not found
  2852.  04h (4)   too many open files (no handles available)
  2853.  05h (5)   access denied
  2854.  06h (6)   invalid handle
  2855.  07h (7)   memory control block destroyed
  2856.  08h (8)   insufficient memory
  2857.  09h (9)   memory block address invalid
  2858.  0Ah (10)  environment invalid (usually >32K in length)
  2859.  0Bh (11)  format invalid
  2860.  0Ch (12)  access code invalid
  2861.  0Dh (13)  data invalid
  2862.  0Eh (14)  reserved
  2863.  0Fh (15)  invalid drive
  2864.  10h (16)  attempted to remove current directory
  2865.  11h (17)  not same device
  2866.  12h (18)  no more files
  2867. ---DOS 3+---
  2868.  13h (19)  disk write-protected
  2869.  14h (20)  unknown unit
  2870.  15h (21)  drive not ready
  2871.  16h (22)  unknown command
  2872.  17h (23)  data error (CRC)
  2873.  18h (24)  bad request structure length
  2874.  19h (25)  seek error
  2875.  1Ah (26)  unknown media type (non-DOS disk)
  2876.  1Bh (27)  sector not found
  2877.  1Ch (28)  printer out of paper
  2878.  1Dh (29)  write fault
  2879.  1Eh (30)  read fault
  2880.  1Fh (31)  general failure
  2881.  20h (32)  sharing violation
  2882.  21h (33)  lock violation
  2883.  22h (34)  disk change invalid (ES:DI -> media ID structure)(see #0886)
  2884.  23h (35)  FCB unavailable
  2885.  24h (36)  sharing buffer overflow
  2886.  25h (37)  (DOS 4+) code page mismatch
  2887.  26h (38)  (DOS 4+) cannot complete file operation (out of input)
  2888.  27h (39)  (DOS 4+) insufficient disk space
  2889.  28h-31h   reserved
  2890.  32h (50)  network request not supported
  2891.  33h (51)  remote computer not listening
  2892.  34h (52)  duplicate name on network
  2893.  35h (53)  network name not found
  2894.  36h (54)  network busy
  2895.  37h (55)  network device no longer exists
  2896.  38h (56)  network BIOS command limit exceeded
  2897.  39h (57)  network adapter hardware error
  2898.  3Ah (58)  incorrect response from network
  2899.  3Bh (59)  unexpected network error
  2900.  3Ch (60)  incompatible remote adapter
  2901.  3Dh (61)  print queue full
  2902.  3Eh (62)  queue not full
  2903.  3Fh (63)  not enough space to print file
  2904.  40h (64)  network name was deleted
  2905.  41h (65)  network: Access denied
  2906.  42h (66)  network device type incorrect
  2907.  43h (67)  network name not found
  2908.  44h (68)  network name limit exceeded
  2909.  45h (69)  network BIOS session limit exceeded
  2910.  46h (70)  temporarily paused
  2911.  47h (71)  network request not accepted
  2912.  48h (72)  network print/disk redirection paused
  2913.  49h (73)  network software not installed
  2914.         (LANtastic) invalid network version
  2915.  4Ah (74)  unexpected adapter close
  2916.         (LANtastic) account expired
  2917.  4Bh (75)  (LANtastic) password expired
  2918.  4Ch (76)  (LANtastic) login attempt invalid at this time
  2919.  4Dh (77)  (LANtastic v3+) disk limit exceeded on network node
  2920.  4Eh (78)  (LANtastic v3+) not logged in to network node
  2921.  4Fh (79)  reserved
  2922.  50h (80)  file exists
  2923.  51h (81)  reserved
  2924.  52h (82)  cannot make directory
  2925.  53h (83)  fail on INT 24h
  2926.  54h (84)  (DOS 3.3+) too many redirections
  2927.  55h (85)  (DOS 3.3+) duplicate redirection
  2928.  56h (86)  (DOS 3.3+) invalid password
  2929.  57h (87)  (DOS 3.3+) invalid parameter
  2930.  58h (88)  (DOS 3.3+) network write fault
  2931.  59h (89)  (DOS 4+) function not supported on network
  2932.  5Ah (90)  (DOS 4+) required system component not installed
  2933.  64h (100) (MSCDEX) unknown error
  2934.  65h (101) (MSCDEX) not ready
  2935.  66h (102) (MSCDEX) EMS memory no longer valid
  2936.  67h (103) (MSCDEX) not High Sierra or ISO-9660 format
  2937.  68h (104) (MSCDEX) door open
  2938.  
  2939. Format of media ID structure:
  2940. Offset    Size    Description    (Table 0886)
  2941.  00h 12 BYTEs    ASCIZ volume label of required disk
  2942.  0Ch    DWORD    serial number (DOS 4+)
  2943.  
  2944. (Table 0887)
  2945. Values for DOS Error Class:
  2946.  01h    out of resource (storage space or I/O channels)
  2947.  02h    temporary situation (file or record lock)
  2948.  03h    authorization (denied access)
  2949.  04h    internal (system software bug)
  2950.  05h    hardware failure
  2951.  06h    system failure (configuration file missing or incorrect)
  2952.  07h    application program error
  2953.  08h    not found
  2954.  09h    bad format
  2955.  0Ah    locked
  2956.  0Bh    media error
  2957.  0Ch    already exists
  2958.  0Dh    unknown
  2959.  
  2960. (Table 0888)
  2961. Values for DOS Suggested Action:
  2962.  01h    retry
  2963.  02h    delayed retry
  2964.  03h    prompt user to reenter input
  2965.  04h    abort after cleanup
  2966.  05h    immediate abort
  2967.  06h    ignore
  2968.  07h    retry after user intervention
  2969.  
  2970. (Table 0889)
  2971. Values for DOS Error Locus:
  2972.  01h    unknown or not appropriate
  2973.  02h    block device (disk error)
  2974.  03h    network related
  2975.  04h    serial device (timeout)
  2976.  05h    memory related
  2977. --------D-2159--BX0001-----------------------
  2978. INT 21 - European MS-DOS 4.0 - GET HARD ERROR INFORMATION
  2979.     AH = 59h
  2980.     BX = 0001h
  2981. Return: ES:DI -> hard error information packet (see #0890) for most recent
  2982.         hard (critical) error
  2983. SeeAlso: AH=59h/BX=0000h,AH=95h,INT 24
  2984.  
  2985. Format of European MS-DOS 4.0 hard error information packet:
  2986. Offset    Size    Description    (Table 0890)
  2987.  00h    WORD    contents of AX at system entry
  2988.  02h    WORD    Process ID which encountered error
  2989.  04h    WORD    contents of AX at time of error
  2990.  06h    BYTE    error type
  2991.         00h physical I/O error
  2992.         01h disk change request
  2993.         02h file sharing violation
  2994.         03h FCB problem
  2995.         04h file locking violation
  2996.         05h bad FAT
  2997.         06h network detected error
  2998.  07h    BYTE    INT 24 error code
  2999.  08h    WORD    extended error code (see #0885)
  3000.  0Ah    DWORD    pointer to associated device
  3001. --------D-215A-------------------------------
  3002. INT 21 - DOS 3+ - CREATE TEMPORARY FILE
  3003.     AH = 5Ah
  3004.     CX = file attribute (see #0643 at AX=4301h)
  3005.     DS:DX -> ASCIZ path ending with a '\' + 13 zero bytes to receive the
  3006.         generated filename
  3007. Return: CF clear if successful
  3008.         AX = file handle opened for read/write in compatibility mode
  3009.         DS:DX pathname extended with generated name for temporary file
  3010.     CF set on error
  3011.         AX = error code (03h,04h,05h) (see #0885)
  3012. Desc:    creates a file with a unique name which must be explicitly deleted
  3013. BUGS:    COMPAQ DOS 3.31 hangs if the pathname is at XXXXh:0000h; it apparently
  3014.       wraps around to the end of the segment
  3015.     MS-DOS 5.00 revisions A and B and PC-DOS 5.00 revision A reportedly
  3016.       hang the system if the specified path is the root directory and the
  3017.       root directory is full (no free directory entries)
  3018. Note:    under the FlashTek X-32 DOS extender, the path pointer is in DS:EDX
  3019. SeeAlso: AH=3Ch,AH=5Bh
  3020. --------D-215B-------------------------------
  3021. INT 21 - DOS 3+ - CREATE NEW FILE
  3022.     AH = 5Bh
  3023.     CX = file attribute (see #0643 at AX=4301h)
  3024.     DS:DX -> ASCIZ filename
  3025. Return: CF clear if successful
  3026.         AX = file handle opened for read/write in compatibility mode
  3027.     CF set on error
  3028.         AX = error code (03h,04h,05h,50h) (see #0885)
  3029. Notes:    unlike AH=3Ch, this function will fail if the specified file exists
  3030.       rather than truncating it; this permits its use in creating semaphore
  3031.       files because it is an atomic "test and set" operation
  3032.     under the FlashTek X-32 DOS extender, the filename pointer is in DS:EDX
  3033. SeeAlso: AH=3Ch,AH=5Ah
  3034. --------D-215C-------------------------------
  3035. INT 21 - DOS 3+ - "FLOCK" - RECORD LOCKING
  3036.     AH = 5Ch
  3037.     AL = subfunction
  3038.         00h lock region of file
  3039.         01h unlock region of file
  3040.     BX = file handle
  3041.     CX:DX = start offset of region within file
  3042.     SI:DI = length of region in bytes
  3043. Return: CF clear if successful
  3044.     CF set on error
  3045.         AX = error code (01h,06h,21h,24h) (see #0885)
  3046. Notes:    error returned unless SHARE or network installed
  3047.     an unlock call must specify the same region as some prior lock call
  3048.     locked regions become entirely inaccessible to other processes
  3049.     duplicate handles created with AH=45h or AH=46h inherit locks, but
  3050.       handles inherited by child processes (see AH=4Bh) do not
  3051.     under DR-DOS 3.41 and 5.0, if a process opens a file without the no-
  3052.       inherit flag and then starts a child, any locks set by the parent
  3053.       are ignored, and the child will only get an error if it tries to
  3054.       lock an area previously locked by the parent process
  3055. SeeAlso: AX=440Bh,AH=BCh,AH=BEh,INT 2F/AX=110Ah,INT 2F/AX=110Bh
  3056. --------D-215D00-----------------------------
  3057. INT 21 U - DOS 3.1+ internal - SERVER FUNCTION CALL
  3058.     AX = 5D00h
  3059.     DS:DX -> DOS parameter list (see #0891)
  3060.     DPL contains all register values for a call to INT 21h
  3061. Return: as appropriate for function being called
  3062. Notes:    does not check AH.  Out of range values will crash the system
  3063.     executes using specified computer ID and process ID
  3064.     sharing delay loops skipped
  3065.     a special sharing mode is enabled to handle FCBs opened across network
  3066.     wildcards are enabled for DELETE (AH=41h) and RENAME (AH=56h) under
  3067.       MS-DOS; under DR-DOS 3.41, wildcards corrupt the filesystem; and
  3068.       under DR-DOS 5.0-6.0, the call returns error code 03h due to improper
  3069.       support for the server function call (see below)
  3070.     an extra file attribute parameter is enabled for OPEN (AH=3Dh),
  3071.       DELETE (AH=41h), and RENAME (AH=56h)
  3072.     functions which take filenames require canonical names (as returned
  3073.       by AH=60h); this is apparently to prevent multi-hop file forwarding
  3074. BUGS:    the OS/2 2.0 DOS Boot Session incorrectly maps DOS drive letters,
  3075.       seemingly ignoring HPFS drives
  3076.     DR-DOS 5.0-6.0 merely recursively call INT 21 after loading the
  3077.       registers from the DPL, leading to problems for peer-to-peer
  3078.       networks
  3079. SeeAlso: AH=3Dh,AH=41h,AH=56h,AH=60h
  3080.  
  3081. Format of DOS parameter list:
  3082. Offset    Size    Description    (Table 0891)
  3083.  00h    WORD    AX
  3084.  02h    WORD    BX
  3085.  04h    WORD    CX
  3086.  06h    WORD    DX
  3087.  08h    WORD    SI
  3088.  0Ah    WORD    DI
  3089.  0Ch    WORD    DS
  3090.  0Eh    WORD    ES
  3091.  10h    WORD    reserved (0)
  3092.  12h    WORD    computer ID (0 = current system)
  3093.  14h    WORD    process ID (PSP segment on specified computer)
  3094. Note:    under Windows Enhanced mode, the computer ID is normally the virtual
  3095.       machine ID (see INT 2F/AX=1683h), though this can reportedly be
  3096.       changed by setting UniqueDOSPSP= in SYSTEM.INI
  3097. --------D-215D01-----------------------------
  3098. INT 21 U - DOS 3.1+ internal - COMMIT ALL FILES FOR SPECIFIED COMPUTER/PROCESS
  3099.     AX = 5D01h
  3100.     DS:DX -> DOS parameter list (see #0891), only computer ID and
  3101.           process ID fields used
  3102. Return: CF set on error
  3103.         AX = error code (see #0885)
  3104.     CF clear if successful
  3105. Notes:    flushes buffers and updates directory entries for each file which has
  3106.       been written to; if remote file, calls INT 2F/AX=1107h
  3107.     the computer ID and process ID are stored but ignored under DOS 3.3
  3108.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  3109. SeeAlso: AH=0Dh,AH=68h,INT 2F/AX=1107h
  3110. --------D-215D02-----------------------------
  3111. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE FILE BY NAME
  3112.     AX = 5D02h
  3113.     DS:DX -> DOS parameter list (see #0891), only fields DX, DS,
  3114.           computer ID, and process ID used
  3115.     DPL's DS:DX -> ASCIZ name of file to close
  3116. Return: CF set on error
  3117.         AX = error code (see #0885)
  3118.     CF clear if successful
  3119. Notes:    error unless SHARE is loaded (calls [SysFileTable-28h])
  3120.       (see #0848 at AH=52h)
  3121.     name must be canonical fully-qualified, such as returned by AH=60h
  3122.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  3123.     not supported by Novell DOS 7
  3124. SeeAlso: AX=5D03h,AX=5D04h,AH=3Eh,AH=60h
  3125. --------D-215D03-----------------------------
  3126. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN COMPUTER
  3127.     AX = 5D03h
  3128.     DS:DX -> DOS parameter list (see #0891), only computer ID used
  3129. Return: CF set on error
  3130.         AX = error code (see #0885)
  3131.     CF clear if successful
  3132. Notes:    error unless SHARE is loaded (calls [SysFileTable-30h])
  3133.       (see #0848 at AH=52h)
  3134.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  3135.     not supported by Novell DOS 7
  3136. SeeAlso: AX=5D02h,AX=5D04h
  3137. --------D-215D04-----------------------------
  3138. INT 21 U - DOS 3.1+ internal - SHARE.EXE - CLOSE ALL FILES FOR GIVEN PROCESS
  3139.     AX = 5D04h
  3140.     DS:DX -> DOS parameter list (see #0891), only computer ID and
  3141.           process ID fields used
  3142. Return: CF set on error
  3143.         AX = error code (see #0885)
  3144.     CF clear if successful
  3145. Notes:    error unless SHARE is loaded (calls [SysFileTable-2Ch])
  3146.        (see #0848 at AH=52h)
  3147.     not supported by DR-DOS 3.41 and 5.0; returns error code 01h
  3148.     not supported by Novell DOS 7
  3149. SeeAlso: AX=5D02h,AX=5D03h,INT 2F/AX=111Dh
  3150. --------D-215D05-----------------------------
  3151. INT 21 U - DOS 3.1+ internal - SHARE.EXE - GET OPEN FILE LIST ENTRY
  3152.     AX = 5D05h
  3153.     DS:DX -> DOS parameter list (see #0891)
  3154.     DPL's BX = index of sharing record (see #0849 at AH=52h)
  3155.     DPL's CX = index of SFT in sharing record's SFT list
  3156. Return: CF clear if successful
  3157.         ES:DI -> ASCIZ filename
  3158.         BX = network machine number of SFT's owner
  3159.         CX = number of locks held by SFT's owner
  3160.     CF set if either index out of range
  3161.         AX = 0012h (no more files)
  3162. Notes:    error unless SHARE is loaded (calls [SysFileTable-18h])
  3163.       (see #0848 at AH=52h)
  3164.     names are always canonical fully-qualified, such as returned by AH=60h
  3165.     not supported by DR-DOS 3.41 and 5.0 and Novell DOS 7, but does not
  3166.       return an error, instead destroying AX
  3167. SeeAlso: AH=5Ch,AH=60h
  3168. --------D-215D06-----------------------------
  3169. INT 21 U - DOS 3.0+ internal - GET ADDRESS OF DOS SWAPPABLE DATA AREA
  3170.     AX = 5D06h
  3171. Return: CF set on error
  3172.        AX = error code (see #0885)
  3173.     CF clear if successful
  3174.         DS:SI -> nonreentrant data area (includes all three DOS stacks)
  3175.         (critical error flag is first byte) (see #0892)
  3176.         CX = size in bytes of area which must be swapped while in DOS
  3177.         DX = size in bytes of area which must always be swapped
  3178. Notes:    the Critical Error flag is used in conjunction with the InDOS flag
  3179.       (see AH=34h) to determine when it is safe to enter DOS from a TSR
  3180.     setting CritErr flag allows use of functions 50h/51h from INT 28h under
  3181.       DOS 2.x by forcing use of correct stack
  3182.     swapping the data area allows reentering DOS unless DOS is in a
  3183.       critical section delimited by INT 2A/AH=80h and INT 2A/AH=81h,82h
  3184.     under DOS 4.0, AX=5D0Bh should be used instead of this function
  3185.     SHARE and other DOS utilities consult the byte at offset 04h in the
  3186.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  3187.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  3188.     DR-DOS 3.41+ supports this function, but the SDA format beyond the
  3189.       first 18h bytes is completely different from MS-DOS
  3190. SeeAlso: AX=5D0Bh,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h
  3191.  
  3192. Format of DOS 3.10-3.30 Swappable Data Area:
  3193. Offset    Size    Description    (Table 0892)
  3194.  -34    BYTE    (DOS 3.10+) printer echo flag (00h off, FFh active)
  3195.  -31    BYTE    (DOS 3.30) current switch character
  3196.  -28    BYTE    (DOS 3.30) incremented on each INT 21/AX=5E01h call
  3197.  -27 16 BYTEs    (DOS 3.30) machine name set by INT 21/AX=5E01h
  3198.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  3199.           enable critical-section calls (see INT 2A/AH=80h)
  3200.  -1    BYTE    unused padding
  3201. ---start of actual SDA---
  3202.  00h    BYTE    critical error flag ("ErrorMode")
  3203.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  3204.  02h    BYTE    drive on which current critical error occurred, or FFh
  3205.         (DR-DOS sets to drive number during INT 24, 00h otherwise)
  3206.  03h    BYTE    locus of last error
  3207.  04h    WORD    extended error code of last error
  3208.  06h    BYTE    suggested action for last error
  3209.  07h    BYTE    class of last error
  3210.  08h    DWORD    ES:DI pointer for last error
  3211.  0Ch    DWORD    current DTA (Disk Transfer Address)
  3212.         note: may point into SDA during the DOS EXEC function
  3213.           (see AH=4Bh), so programs which swap the SDA must be
  3214.           prepared to move the DTA to a private buffer if they
  3215.           might be invoked during an EXEC
  3216.  10h    WORD    current PSP
  3217.  12h    WORD    stores SP across an INT 23
  3218.  14h    WORD    return code from last process termination (zerod after reading
  3219.           with AH=4Dh)
  3220.  16h    BYTE    current drive
  3221.  17h    BYTE    extended break flag
  3222. ---remainder need only be swapped if in DOS---
  3223.  18h    WORD    value of AX on call to INT 21
  3224.  1Ah    WORD    PSP segment for sharing/network
  3225.  1Ch    WORD    network machine number for sharing/network (0000h = us)
  3226.  1Eh    WORD    first usable memory block found when allocating memory
  3227.  20h    WORD    best usable memory block found when allocating memory
  3228.  22h    WORD    last usable memory block found when allocating memory
  3229.  24h    WORD    memory size in paragraphs (used only during initialization)
  3230.  26h    WORD    last entry checked during directory search
  3231.  28h    BYTE    flag: INT 24 returned Fail
  3232.  29h    BYTE    flags: allowable INT 24 actions (passed to INT 24 in AH)
  3233.  2Ah    BYTE    directory flag (00h directory, 01h file)
  3234.  2Bh    BYTE    flag: FFh if Ctrl-Break termination, 00h otherwise
  3235.  2Ch    BYTE    flag: allow embedded blanks in FCB
  3236.  2Dh    BYTE    padding (unused)
  3237.  2Eh    BYTE    day of month
  3238.  2Fh    BYTE    month
  3239.  30h    WORD    year - 1980
  3240.  32h    WORD    number of days since 1-1-1980
  3241.  34h    BYTE    day of week (0 = Sunday)
  3242.  35h    BYTE    flag: console swapped during read from device
  3243.  36h    BYTE    flag: safe to call INT 28 if nonzero
  3244.  37h    BYTE    flag: if nonzero, INT 24 Abort turned into INT 24 Fail
  3245.         (set only during process termination)
  3246.  38h 26 BYTEs    device driver request header (see #1382 at INT 2F/AX=0802h)
  3247.  52h    DWORD    pointer to device driver entry point (used in calling driver)
  3248.  56h 22 BYTEs    device driver request header for I/O calls
  3249.  6Ch 14 BYTEs    device driver request header for disk status check
  3250.  7Ah    DWORD    pointer to device I/O buffer???
  3251.  7Eh    WORD    ???
  3252.  80h    WORD    ???
  3253.  82h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  3254.  83h    BYTE    padding (unused)
  3255.  84h  3 BYTEs    24-bit user number (see AH=30h)
  3256.  87h    BYTE    OEM number (see #0619 at AH=30h)
  3257.  88h    WORD    offset to error code conversion table for INT 25/INT 26
  3258.  8Ah  6 BYTEs    CLOCK$ transfer record (see #0893)
  3259.  90h    BYTE    device I/O buffer for single-byte I/O functions
  3260.  91h    BYTE    padding??? (unused)
  3261.  92h 128 BYTEs    buffer for filename
  3262. 112h 128 BYTEs    buffer for filename
  3263. 192h 21 BYTEs    findfirst/findnext search data block (see #0839 at AH=4Eh)
  3264. 1A7h 32 BYTEs    directory entry for found file (see #0580 at AH=11h)
  3265. 1C7h 81 BYTEs    copy of current directory structure for drive being accessed
  3266. 218h 11 BYTEs    FCB-format filename for device name comparison
  3267. 223h    BYTE    terminating NUL for above filename
  3268. 224h 11 BYTEs    wildcard destination specification for rename (FCB format)
  3269. 22Fh    BYTE    terminating NUL for above spec
  3270. 230h    BYTE    ???
  3271. 231h    WORD    destination file/directory starting sector
  3272. 233h  5 BYTEs    ???
  3273. 238h    BYTE    extended FCB file attribute
  3274. 239h    BYTE    type of FCB (00h regular, FFh extended)
  3275. 23Ah    BYTE    directory search attributes
  3276. 23Bh    BYTE    file open/access mode
  3277. 23Ch    BYTE    file found/delete flag
  3278.         bit 0: file found
  3279.         bit 4: file deleted
  3280. 23Dh    BYTE    flag: device name found on rename, or file not found
  3281. 23Eh    BYTE    splice flag (file name and directory name together)
  3282. 23Fh    BYTE    flag indicating how DOS function was invoked
  3283.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  3284. 240h    BYTE    sector position within cluster
  3285. 241h    BYTE    flag: translate sector/cluster (00h no, 01h yes)
  3286. 242h    BYTE    flag: 00h if read, 01h if write
  3287. 243h    BYTE    current working drive number
  3288. 244h    BYTE    cluster factor
  3289. 245h    BYTE    flag: cluster split mode
  3290. 246h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  3291. 247h    BYTE    canonicalized filename referred to existing file/dir if FFh
  3292. 248h    BYTE    volume ID flag
  3293. 249h    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  3294. 24Ah    BYTE    file create flag (00h = no, search only)
  3295. 24Bh    BYTE    value with which to replace first byte of deleted file's name
  3296.           (normally E5h, but 00h as described under INT 21/AH=13h)
  3297. 24Ch    DWORD    pointer to Drive Parameter Block for critical error invocation
  3298.         temp: used during process termination
  3299. 250h    DWORD    pointer to stack frame containing user registers on INT 21
  3300. 254h    WORD    stores SP across INT 24
  3301. 256h    DWORD    pointer to DOS Drive Parameter Block for ???
  3302. 25Ah    WORD    saving partial cluster number
  3303. 25Ch    WORD    temp: sector of work current cluster
  3304. 25Eh    WORD    high part of cluster number (only low byte referenced)
  3305. 260h    WORD    ??? temp
  3306. 262h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  3307. 263h    BYTE    padding (unused)
  3308. 264h    DWORD    pointer to device header when filename is character device
  3309. 268h    DWORD    pointer to current SFT
  3310. 26Ch    DWORD    pointer to current directory structure for drive being accessed
  3311. 270h    DWORD    pointer to caller's FCB
  3312. 274h    WORD    number of SFT to which file being opened will refer
  3313. 276h    WORD    temporary storage for file handle
  3314. 278h    DWORD    pointer to a JFT entry in process handle table
  3315.           (see #0603 at AH=26h)
  3316. 27Ch    WORD    offset in DOS DS of first filename argument
  3317. 27Eh    WORD    offset in DOS DS of second filename argument
  3318. 280h    WORD    offset of last component in pathname or FFFFh
  3319. 282h    WORD    offset of transfer address to add
  3320. 284h    WORD    last relative cluster within file being accessed
  3321. 286h    WORD    temp: absolute cluster number being accessed
  3322. 288h    WORD    directory sector number
  3323. 28Ah    WORD    ??? current cluster number
  3324. 28Ch    WORD    current relative sector number within file
  3325. 28Eh    WORD    current sector number
  3326. 290h    WORD    current byte offset within sector
  3327. 292h    DWORD    current offset in file
  3328. 296h    DWORD    temp: file byte count
  3329. 29Ah    WORD    temp: file byte count
  3330. 29Ch    WORD    free file cluster entry
  3331. 29Eh    WORD    last file cluster entry
  3332. 2A0h    WORD    next file cluster number
  3333. 2A2h    DWORD    number of bytes appended to file
  3334. 2A6h    DWORD    pointer to current work disk buffer
  3335. 2AAh    DWORD    pointer to working SFT
  3336. 2AEh    WORD    used by INT 21 dispatcher to store caller's BX
  3337. 2B0h    WORD    used by INT 21 dispatcher to store caller's DS
  3338. 2B2h    WORD    temporary storage while saving/restoring caller's registers
  3339. 2B4h    DWORD    pointer to prev call frame (offset 250h) if INT 21 reentered
  3340.         also switched to for duration of INT 24
  3341. 2B8h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  3342.         (see #0839 at AH=4Eh)
  3343. 2CDh 32 BYTEs    directory entry for file being renamed (see #0580 at AH=11h)
  3344. 2EDh 331 BYTEs    critical error stack
  3345.    403h     35 BYTEs scratch SFT
  3346. 438h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  3347. 5B8h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  3348. ---DOS 3.2,3.3x only---
  3349. 738h    BYTE    device driver lookahead flag (usually printer) (see AH=64h)
  3350. 739h    BYTE    volume change flag
  3351. 73Ah    BYTE    flag: virtual open
  3352. 73Bh    BYTE    ???
  3353. SeeAlso: #0895
  3354.  
  3355. Format of CLOCK$ transfer record:
  3356. Offset    Size    Description    (Table 0893)
  3357.  00h    WORD    number of days since 1-Jan-1980
  3358.  02h    BYTE    minutes
  3359.  03h    BYTE    hours
  3360.  04h    BYTE    hundredths of second
  3361.  05h    BYTE    seconds
  3362. --------D-215D07-----------------------------
  3363. INT 21 U - DOS 3.1+ network - GET REDIRECTED PRINTER MODE
  3364.     AX = 5D07h
  3365. Return: DL = mode
  3366.         00h redirected output is combined
  3367.         01h redirected output in separate print jobs
  3368. SeeAlso: AX=5D08h,AX=5D09h,INT 2F/AX=1125h
  3369. --------D-215D08-----------------------------
  3370. INT 21 U - DOS 3.1+ network - SET REDIRECTED PRINTER MODE
  3371.     AX = 5D08h
  3372.     DL = mode
  3373.         00h redirected output is combined
  3374.         01h redirected output placed in separate jobs, start new print job
  3375.         now
  3376. SeeAlso: AX=5D07h,AX=5D09h,INT 2F/AX=1125h
  3377. --------D-215D09-----------------------------
  3378. INT 21 U - DOS 3.1+ network - FLUSH REDIRECTED PRINTER OUTPUT
  3379.     AX = 5D09h
  3380. Notes:    forces redirected printer output to be printed, and starts a new print
  3381.       job
  3382.     this function is also supported by 10Net, which calls it Terminate All
  3383.       Spool Jobs, and does not flush if in "combine" mode
  3384. SeeAlso: AX=5D07h,AX=5D08h,INT 2F/AX=1125h
  3385. --------D-215D0A-----------------------------
  3386. INT 21 - DOS 3.1+ - SET EXTENDED ERROR INFORMATION
  3387.     AX = 5D0Ah
  3388.     DS:DX -> 11-word DOS parameter list (see #0891)
  3389. Return: nothing.  next call to AH=59h will return values from fields AX,BX,CX,
  3390.       DX,DI, and ES in corresponding registers
  3391. Notes:    documented for DOS 5+, but undocumented in earlier versions
  3392.     the MS-DOS Programmer's Reference incorrectly states that this call was
  3393.       introduced in DOS 4, and fails to mention that the ERROR structure
  3394.       passed to this function is a DOS parameter list.
  3395. BUGS:    DR-DOS 3.41 and 5.0 read the value for ES from the DS field of the
  3396.       DPL; fortunately, MS-DOS ignores the DS field, allowing a generic
  3397.       routine which sets both DS and ES fields to the same value
  3398.     Novell DOS 7 does not save the pointer, which is always reported as
  3399.       0000h:0000h by AH=59h
  3400. SeeAlso: AH=59h/BX=0000h
  3401. --------D-215D0B-----------------------------
  3402. INT 21 OU - DOS 4.x only internal - GET DOS SWAPPABLE DATA AREAS
  3403.     AX = 5D0Bh
  3404. Return: CF set on error
  3405.         AX = error code (see #0885)
  3406.     CF clear if successful
  3407.         DS:SI -> swappable data area list (see #0894)
  3408. Notes:    copying and restoring the swappable data areas allows DOS to be
  3409.       reentered unless it is in a critical section delimited by calls to
  3410.       INT 2A/AH=80h and INT 2A/AH=81h,82h
  3411.     SHARE and other DOS utilities consult the byte at offset 04h in the
  3412.       DOS data segment (see INT 2F/AX=1203h) to determine the SDA format
  3413.       in use: 00h = DOS 3.x, 01h = DOS 4.0-6.0, other = error.
  3414.     DOS 5+ use the SDA format listed below, but revert back to the DOS 3.x
  3415.       call for finding the SDA (see #0892)
  3416. SeeAlso: AX=5D06h,INT 2A/AH=80h,INT 2A/AH=81h,INT 2A/AH=82h,INT 2F/AX=1203h
  3417.  
  3418. Format of DOS 4.x swappable data area list:
  3419. Offset    Size    Description    (Table 0894)
  3420.  00h    WORD    count of data areas
  3421.  02h  N BYTEs    "count" copies of data area record
  3422.         Offset    Size    Description
  3423.          00h    DWORD    address
  3424.          04h    WORD    length and type
  3425.                 bit 15 set if swap always, clear if swap in DOS
  3426.                 bits 14-0: length in bytes
  3427. SeeAlso: #0895
  3428.  
  3429. Format of DOS 4.0-6.0 swappable data area:
  3430. Offset    Size    Description    (Table 0895)
  3431.  -34    BYTE    printer echo flag (00h off, FFh active)
  3432.  -31    BYTE    current switch character (ignored by DOS 5+)
  3433.  -28    BYTE    incremented on each INT 21/AX=5E01h call
  3434.  -27 16 BYTEs    machine name set by INT 21/AX=5E01h
  3435.  -11  5 WORDs    zero-terminated list of offsets which need to be patched to
  3436.           enable critical-section calls (see INT 2A/AH=80h)
  3437.         (all offsets are 0D0Ch, but this list is still present for
  3438.           DOS 3.x compatibility)
  3439.  -1    BYTE    unused padding
  3440. ---start of actual SDA---
  3441.  00h    BYTE    critical error flag ("ErrorMode")
  3442.  01h    BYTE    InDOS flag (count of active INT 21 calls)
  3443.  02h    BYTE    drive on which current critical error occurred or FFh
  3444.  03h    BYTE    locus of last error
  3445.  04h    WORD    extended error code of last error
  3446.  06h    BYTE    suggested action for last error
  3447.  07h    BYTE    class of last error
  3448.  08h    DWORD    ES:DI pointer for last error
  3449.  0Ch    DWORD    current DTA (Disk Transfer Address)
  3450.         note: may point into SDA during the DOS EXEC function
  3451.           (see AH=4Bh), so programs which swap the SDA must be
  3452.           prepared to move the DTA to a private buffer if they
  3453.           might be invoked during an EXEC
  3454.  10h    WORD    current PSP
  3455.  12h    WORD    stores SP across an INT 23
  3456.  14h    WORD    return code from last process termination (zerod after reading
  3457.           with AH=4Dh)
  3458.  16h    BYTE    current drive
  3459.  17h    BYTE    extended break flag
  3460.  18h    BYTE    flag: code page switching
  3461.  19h    BYTE    flag: copy of previous byte in case of INT 24 Abort
  3462. ---remainder need only be swapped if in DOS---
  3463.  1Ah    WORD    value of AX on call to INT 21
  3464.  1Ch    WORD    PSP segment for sharing/network
  3465.  1Eh    WORD    network machine number for sharing/network (0000h = us)
  3466.  20h    WORD    first usable memory block found when allocating memory
  3467.  22h    WORD    best usable memory block found when allocating memory
  3468.  24h    WORD    last usable memory block found when allocating memory
  3469.  26h    WORD    memory size in paragraphs (used only during initialization)
  3470.  28h    WORD    last entry checked during directory search
  3471.  2Ah    BYTE    flag: nonzero if INT 24 Fail
  3472.  2Bh    BYTE    flags: allowable INT 24 responses (passed to INT 24 in AH)
  3473.  2Ch    BYTE    flag: do not set directory if nonzero
  3474.  2Dh    BYTE    flag: program aborted by ^C
  3475.  2Eh    BYTE    flag: allow embedded blanks in FCB
  3476.         may also allow use of "*" wildcard in FCBs
  3477.  2Fh    BYTE    padding (unused)
  3478.  30h    BYTE    day of month
  3479.  31h    BYTE    month
  3480.  32h    WORD    year - 1980
  3481.  34h    WORD    number of days since 1-1-1980
  3482.  36h    BYTE    day of week (0 = Sunday)
  3483.  37h    BYTE    flag: console swapped during read from device
  3484.  38h    BYTE    flag: safe to call INT 28 if nonzero
  3485.  39h    BYTE    flag: abort currently in progress, turn INT 24 Abort into Fail
  3486.  3Ah 30 BYTEs    device driver request header (see #1382 at INT 2F/AX=0802h) for
  3487.           device calls
  3488.  58h    DWORD    pointer to device driver entry point (used in calling driver)
  3489.  5Ch 22 BYTEs    device driver request header for I/O calls
  3490.  72h 14 BYTEs    device driver request header for disk status check
  3491.  80h    DWORD    pointer to device I/O buffer
  3492.  84h    WORD    ???
  3493.  86h    WORD    ??? (0)
  3494.  88h    BYTE    type of PSP copy (00h=simple for INT 21/AH=26h, FFh=make child)
  3495.  89h    DWORD    start offset of file region to lock/unlock
  3496.  8Dh    DWORD    length of file region to lock/unlock
  3497.  91h    BYTE    padding (unused)
  3498.  92h  3 BYTEs    24-bit user number (see AH=30h)
  3499.  95h    BYTE    OEM number (see #0619 at AH=30h)
  3500.  96h  6 BYTEs    CLOCK$ transfer record (see #0893 at AX=5D06h)
  3501.  9Ch    BYTE    device I/O buffer for single-byte I/O functions
  3502.  9Dh    BYTE    padding???
  3503.  9Eh 128 BYTEs    buffer for filename
  3504. 11Eh 128 BYTEs    buffer for filename
  3505. 19Eh 21 BYTEs    findfirst/findnext search data block (see #0839 at AH=4Eh)
  3506. 1B3h 32 BYTEs    directory entry for found file (see #0619 at AH=11h)
  3507. 1D3h 88 BYTEs    copy of current directory structure for drive being accessed
  3508. 22Bh 11 BYTEs    FCB-format filename for device name comparison
  3509. 236h    BYTE    terminating NUL for above filename
  3510. 237h 11 BYTEs    wildcard destination specification for rename (FCB format)
  3511. 242h    BYTE    terminating NUL for above filespec
  3512. 243h    BYTE    ???
  3513. 244h    WORD    ???
  3514. 246h  5 BYTEs    ???
  3515. 24Bh    BYTE    extended FCB file attributes
  3516. 24Ch    BYTE    type of FCB (00h regular, FFh extended)
  3517. 24Dh    BYTE    directory search attributes
  3518. 24Eh    BYTE    file open/access mode
  3519. 24Fh    BYTE    ??? flag bits
  3520.         reportedly 00h when deleting a file under MSDOS 5.0
  3521. 250h    BYTE    flag: device name found on rename, or file not found
  3522. 251h    BYTE    splice flag??? (file name and directory name together)
  3523. 252h    BYTE    flag indicating how DOS function was invoked
  3524.         (00h = direct INT 20/INT 21, FFh = server call AX=5D00h)
  3525. 253h    BYTE    sector position within cluster
  3526. 254h    BYTE    ??? (flag: translate sector/cluster)
  3527. 255h    BYTE    ??? (flag: 00h if read, 01h if write)
  3528. 256h    BYTE    current working drive number
  3529. 257h    BYTE    cluster factor
  3530. 258h    BYTE    ???
  3531. 259h    BYTE    line edit (AH=0Ah) insert mode flag (nonzero = on)
  3532. 25Ah    BYTE    canonicalized filename referred to existing file/dir if FFh
  3533. 25Bh    BYTE    volume ID flag
  3534. 25Ch    BYTE    type of process termination (00h-03h) (see AH=4Dh)
  3535. 25Dh    BYTE    ???
  3536. 25Eh    BYTE    ??? file create flag (00h = no, search only)
  3537. 25Fh    BYTE    ??? (value for deleted file's first byte)
  3538. 260h    DWORD    pointer to Drive Parameter Block for critical error invocation
  3539. 264h    DWORD    pointer to stack frame containing user registers on INT 21
  3540. 268h    WORD    stores SP across INT 24
  3541. 26Ah    DWORD    pointer to DOS Drive Parameter Block for ???
  3542. 26Eh    WORD    segment of disk buffer
  3543. 270h    WORD    ??? (saving partial cluster number)
  3544. 272h    WORD    ??? (temp: sector of work current cluster)
  3545. 274h    WORD    ??? (high part of cluster number)
  3546. 276h    WORD    ??? (temp)
  3547. 278h    BYTE    Media ID byte returned by AH=1Bh,1Ch
  3548. 279h    BYTE    ??? (doesn't seem to be referenced)
  3549. 27Ah    DWORD    pointer to device header if filename is character device
  3550. 27Eh    DWORD    pointer to current SFT
  3551. 282h    DWORD    pointer to current directory structure for drive being accessed
  3552. 286h    DWORD    pointer to caller's FCB
  3553. 28Ah    WORD    SFT index to which file being opened will refer
  3554. 28Ch    WORD    temporary storage for file handle
  3555. 28Eh    DWORD    pointer to a JFT entry in process handle table
  3556.           (see #0603 at AH=26h)
  3557. 292h    WORD    offset in DOS DS of first filename argument
  3558. 294h    WORD    offset in DOS DS of second filename argument
  3559. 296h    WORD    ??? (offset of last component in pathname or FFFFh)
  3560. 298h    WORD    offset of transfer address to add
  3561. 29Ah    WORD    last relative cluster within file being accessed
  3562. 29Ch    WORD    temp: absolute cluster number being accessed
  3563. 29Eh    WORD    directory sector number
  3564. 2A0h    WORD    ???
  3565. 2A2h    WORD    ??? directory cluster number
  3566. 2A4h    DWORD    current relative sector number within file
  3567. 2A8h    DWORD    ??? (current sector number)
  3568. 2ACh    WORD    ??? (current byte offset within sector)
  3569. 2AEh    DWORD    current offset in file
  3570. 2B2h    WORD    ???
  3571. 2B4h    WORD    bytes in partial sector
  3572. 2B6h    WORD    number of sectors
  3573. 2B8h    WORD    ??? (free file cluster entry)
  3574. 2BAh    WORD    ??? (last file cluster entry)
  3575. 2BCh    WORD    ??? (next file cluster number)
  3576. 2BEh    DWORD    number of bytes appended to file
  3577. 2C2h    DWORD    pointer to current work disk buffer
  3578. 2C6h    DWORD    pointer to working SFT
  3579. 2CAh    WORD    used by INT 21 dispatcher to store caller's BX
  3580. 2CCh    WORD    used by INT 21 dispatcher to store caller's DS
  3581. 2CEh    WORD    temporary storage while saving/restoring caller's registers
  3582. 2D0h    DWORD    pointer to prev call frame (offset 264h) if INT 21 reentered
  3583.         also switched to for duration of INT 24
  3584. 2D4h    WORD    open mode/action for INT 21/AX=6C00h
  3585. 2D6h    BYTE    ??? (set to 00h by INT 21h dispatcher, 02h when a read is
  3586.           performed, and 01h or 03h by INT 21/AX=6C00h)
  3587. 2D7h    WORD    ??? apparently unused
  3588. 2D9h    DWORD    stored ES:DI for AX=6C00h
  3589. 2DDh    WORD    extended file open action code (see #0966 at AX=6C00h)
  3590. 2DFh    WORD    extended file open attributes (see #0965 at AX=6C00h)
  3591. 2E1h    WORD    extended file open file mode (see AX=6C00h)
  3592. 2E3h    DWORD    pointer to filename to open (see AX=6C00h)
  3593. 2E7h    WORD    ??? temp DX storage or 0000h or temp data buffer size from
  3594.           disk buffer
  3595. 2E9h    WORD    ???
  3596. 2EBh    BYTE    ???
  3597. 2ECh    WORD    stores DS during call to [List-of-Lists + 37h]
  3598. 2EEh    WORD    ???
  3599. 2F0h    BYTE    ???
  3600. 2F1h    WORD    ??? bit flags
  3601. 2F3h    DWORD    pointer to user-supplied filename
  3602. 2F7h    DWORD    pointer to ???
  3603. 2FBh    WORD    stores SS during call to [List-of-Lists + 37h]
  3604. 2FDh    WORD    stores SP during call to [List-of-Lists + 37h]
  3605. 2FFh    BYTE    flag, nonzero if stack switched in calling [List-of-Lists+37h]
  3606. 300h 21 BYTEs    FindFirst search data for source file(s) of a rename operation
  3607.         (see #0839 at AH=4Eh)
  3608. 315h 32 BYTEs    directory entry for file being renamed (see #0580 at AH=11h)
  3609. 335h 331 BYTEs    critical error stack
  3610. 480h 384 BYTEs    disk stack (functions greater than 0Ch, INT 25,INT 26)
  3611. 600h 384 BYTEs    character I/O stack (functions 01h through 0Ch)
  3612. 780h    BYTE    device driver lookahead flag (usually printer) (see AH=64h)
  3613. 781h    BYTE    volume change flag
  3614. 782h    BYTE    flag: virtual open
  3615. 783h    BYTE    ???
  3616. 784h    WORD    ???
  3617. 786h    WORD    ???
  3618. 788h    WORD    ???
  3619. 78Ah    WORD    ???
  3620. SeeAlso: #0892,#0894
  3621. --------D-215E00-----------------------------
  3622. INT 21 - DOS 3.1+ network - GET MACHINE NAME
  3623.     AX = 5E00h
  3624.     DS:DX -> 16-byte buffer for ASCIZ machine name
  3625. Return: CF clear if successful
  3626.         CH = validity
  3627.         00h name invalid
  3628.         nonzero valid
  3629.             CL = NetBIOS number for machine name
  3630.             DS:DX buffer filled with blank-paded name
  3631.     CF set on error
  3632.         AX = error code (01h) (see #0885 at AH=59h)
  3633. Note:    supported by OS/2 v1.3+ compatibility box, PC-NFS
  3634. SeeAlso: AX=5E01h
  3635. --------N-215E00-----------------------------
  3636. INT 21 - 10NET v5.0 - GET MACHINE NAME
  3637.     AX = 5E00h
  3638. Return: CL = redirector's NetBIOS name number
  3639.     ES:DI -> network node ID
  3640. SeeAlso: AX=5E01h"10NET"
  3641. --------D-215E01CH00-------------------------
  3642. INT 21 - DOS 3.1+ network - SET MACHINE NAME
  3643.     AX = 5E01h
  3644.     CH = 00h undefine name (make it invalid)
  3645.        <> 0     define name
  3646.     CL = name number
  3647.     DS:DX -> 15-character blank-padded ASCIZ name
  3648. SeeAlso: AX=5E00h
  3649. --------N-215E01-----------------------------
  3650. INT 21 - 10NET v5.0 - GET LOCAL 10NET CONFIGURATION TABLE
  3651.     AX = 5E01h
  3652.     CX = length of buffer
  3653.     DS:DX -> buffer for 10Net configuration table (see #821)
  3654. SeeAlso: AX=5E00h"10NET",INT 6F/AH=02h,INT 6F/AH=03h
  3655.  
  3656. Format of 10Net Configuration Table:
  3657. Offset    Size    Description    (Table 0896)
  3658.  00h  8 BYTEs    user name
  3659.  08h 15 BYTEs    node ID
  3660.  17h  3 BYTEs    unique portion of Ethernet address
  3661.  1Ah    BYTE    Who group number
  3662.  1Bh    WORD    services mask (see #0898)
  3663.  1Dh    DWORD    serial number
  3664.  21h    BYTE    maximum concurrent users with same serial number allowed on net
  3665.  22h    BYTE    chat mask (see #0899)
  3666.  23h    BYTE    internal system bits (see #0900)
  3667.  24h  9 BYTEs    version number in format MM.mm.xxx
  3668.  2Dh    BYTE    flag: 01h if machine is a PS/2
  3669.  2Eh    BYTE    flag: 03h if 80386
  3670.  2Fh    BYTE    spool termination mode: 01h concatenate, 02h truncate
  3671.         (see AX=5D09h)
  3672.  30h    WORD    autospool timeout in clock ticks
  3673.  32h    WORD    monitor timeout in clock ticks
  3674.  34h    WORD    unused
  3675.  36h    WORD    chat timeout in clock ticks
  3676.  38h    WORD    netBIOS session timeout in half-seconds
  3677.  3Ah    WORD    datagram send timeout in seconds
  3678.  3Ch    WORD    keyboard value for initiating chat mode
  3679.  3Eh    WORD    Who timeout in clock ticks
  3680.  40h    BYTE    flag: 01h if server should process rom NetBIOS Post return
  3681.  41h    BYTE    flag: 01h if FCBs should be recycled
  3682.  42h  3 BYTEs    signature "DBG"
  3683.  45h    BYTE    last interrupt (21h or 6Fh)
  3684.  46h    BYTE    last INT 21 AH value
  3685.  47h    BYTE    last INT 6F AH value
  3686.  48h    WORD    last item posted
  3687.  4Ah    WORD    last item free-posted
  3688.  4Ch    WORD    last item handled by server
  3689.  4Eh    WORD    last redirector send NCB
  3690.  50h    WORD    last redirector receive NCB
  3691.  52h  4 BYTEs    signature "TABL"
  3692.  56h    WORD    offset of datagram buffer table header (see #0897)
  3693.  58h    WORD    offset of chat buffer table header (see #0897)
  3694.  5Ah    WORD    offset of Raw buffer table header (see #0897)
  3695.  5Ch    WORD    offset of Workstation buffer table header (see #0897)
  3696.  5Eh    WORD    offset of server receive-any table header (see #0897)
  3697.  60h    WORD    offset of Tiny buffer table header (see #0897)
  3698.  62h    WORD    offset of zero-length buffer table (NCBs) (see #0897)
  3699.  64h    WORD    offset of Rdr (Redirector Mount) table header (see #0897)
  3700.  66h    WORD    offset of Ntab (Redirector Session) table header (see #0897)
  3701.  68h    WORD    offset of FCB table header (see #0897)
  3702.  6Ah    WORD    offset of user file handle table header (see #0897)
  3703.  6Ch    WORD    offset of workstation printer RDR extension table header
  3704.  6Eh    WORD    offset of server shared device table header (see #0897)
  3705.  70h    WORD    offset of server connection table header (see #0897)
  3706.  72h    WORD    offset of server login table header (see #0897)
  3707.  74h    WORD    offset of server file table header (see #0897)
  3708.  76h    WORD    offset of server shared file table header (see #0897)
  3709.  78h    WORD    offset of server record lock table header (see #0897)
  3710.  7Ah    WORD    offset of remote printer claim table header (see #0897)
  3711.  7Ch    WORD    offset of remote printer device table header (see #0897)
  3712.  7Eh    WORD    offset of print server mount table header (see #0897)
  3713.  80h    WORD    offset of print server sessions table header (see #0897)
  3714.  82h    WORD    offset of print server print job structure table header
  3715.  84h    WORD    offset of print server pooled device table header (see #0897)
  3716.  86h    WORD    size of workstation buffer
  3717.  88h    WORD    size of server receive-any buffer
  3718.  8Ah    WORD    size of server raw I/O buffer
  3719.  8Ch  6 BYTEs    reserved
  3720.  92h    DWORD    pointer to profile pathname
  3721.  96h    BYTE    datagram retry count
  3722.  97h    BYTE    NetBIOS LAN adapter number
  3723.  98h  6 BYTEs    physical Ethernet address
  3724.  9Eh    BYTE    NetBIOS server name number
  3725.  9Fh    BYTE    NetBIOS redirector name number
  3726.  A0h    BYTE    10Net interrupt number
  3727.  A1h    BYTE    flag: chat is loaded
  3728.  A2h    BYTE    flag: INT 6F APIs permanently loaded
  3729.  A3h    BYTE    flag: file security present
  3730.  A4h    WORD    reserved
  3731.  A6h    BYTE    fixed mount bitmask for drives A:-H:
  3732.  A7h    BYTE    reserved
  3733.  A8h    WORD    10Net system flags (see #0901)
  3734.  AAh    BYTE    monitor flags (see #0902)
  3735.  ABh  5 BYTEs    reserved
  3736.  B0h    WORD    offset of monitor timer block
  3737.  B2h    WORD    offset of server timer block
  3738.  B4h    WORD    offset of chat timer block
  3739.  B6h    WORD    timer chain
  3740.  B8h  4 BYTEs    signature "TALS"
  3741.  BCh    WORD    number of 10Net sends
  3742.  BEh    WORD    number of 10Net receives
  3743.  C0h    WORD    number of no-buffer conditions
  3744.  C2h    WORD    number of dropped posted messages
  3745.  C4h    WORD    number of server NCB errors
  3746.  C6h    WORD    number of redirector NCB errors
  3747.  C8h    WORD    number of datagram send/receive errors
  3748.  CAh    WORD    number of dropped Whos
  3749.  CCh    WORD    number of dropped submits
  3750.  CEh    WORD    number of session aborts
  3751.  D0h    BYTE    number of NetBIOS interface-busy errors
  3752.  D1h    BYTE    last NetBIOS bad post command
  3753.  D2h    BYTE    last NetBIOS bad redirector command
  3754.  D3h    BYTE    do send datagram send/receive error command
  3755.  D4h    DWORD    -> DOS system parameter table
  3756.  D8h    WORD    number of DOS physical drives
  3757.  DAh    WORD    offset of DOS PSP field in DOS data segment
  3758.  DCh    WORD    offset of in-DOS flag in DOS data segment
  3759.  DEh    WORD    DOS data segment
  3760.  E0h    WORD    offset of DOS SFT in DOS data segment
  3761.  E2h    WORD    offset of number-of-physical-units field in DOS data segment
  3762.  E4h    WORD    10Net code segment
  3763.  E6h    WORD    10Net data segment
  3764.  E8h    WORD    10Net common server segment
  3765.  EAh    WORD    10Net file server segment
  3766.  ECh    WORD    10Net print server segment
  3767.  EEh    WORD    10Net remote printer segment
  3768. Note:    documentation lists field at offset D0h as a WORD, but all following
  3769.       offsets are as though it were a BYTE; if it is indeed a WORD, all
  3770.       offsets after D0h must be increased by one byte
  3771.  
  3772. Format of 10Net Table Header:
  3773. Offset    Size    Description    (Table 0897)
  3774.  -16  4 BYTEs    table identifier
  3775.  -12    WORD    peak number of tables allocated
  3776.  -10    WORD    number of tables currently in use
  3777.  -8    WORD    total number of tables
  3778.  -6    WORD    size of each table
  3779.  -4    WORD    offset of first allocated table
  3780.  -2    WORD    offset of first free table
  3781.  
  3782. Bitfields for 10NET services mask:
  3783. Bit(s)    Description    (Table 0898)
  3784.  0    workstation
  3785.  1    file server
  3786.  2    print queue server
  3787.  3    de-spool server
  3788.  
  3789. Bitfields for 10NET chat mask:
  3790. Bit(s)    Description    (Table 0899)
  3791.  0    chat permitted
  3792.  1    bell enabled
  3793.  2    chat keyboard initiated
  3794.  3    in INT 16 handler
  3795.  4    in Get Input
  3796.  5    display has timed out
  3797.  6    chat is idle
  3798.  
  3799. Bitfields for 10NET internal system bits:
  3800. Bit(s)    Description    (Table 0900)
  3801.  0    submit permitted
  3802.  1    submit initiated
  3803.  2    submit executing
  3804.  3    internal client call/chat/spool/autospool
  3805.  4    in spool termination
  3806.  5    print permitted
  3807.  6    waiting for keyboard input
  3808.  
  3809. Bitfields for 10NET System Flags:
  3810. Bit(s)    Description    (Table 0901)
  3811.  0    in NetBIOS
  3812.  1    processing INT 28
  3813.  2    is server
  3814.  3    in net user-DOS function
  3815.  4    in DOS user-DOS function
  3816.  5    in net for user non-DOS function
  3817.  6    in server DOS function
  3818.  7    in server non-DOS function
  3819.  8    in terminate
  3820.  10    in user on server request
  3821.  13    in DOS for user on server
  3822.  14    disable critical error handler
  3823.  
  3824. Bitfields for Monitor Flags:
  3825. Bit(s)    Description    (Table 0902)
  3826.  0    waiting for monitor response
  3827.  4    in monitor get-input routine
  3828.  5    monitor display timeout
  3829.  6    sensing for escape key
  3830. --------D-215E02-----------------------------
  3831. INT 21 - DOS 3.1+ network - SET NETWORK PRINTER SETUP STRING
  3832.     AX = 5E02h
  3833.     BX = redirection list index (see AX=5F02h)
  3834.     CX = length of setup string
  3835.     DS:SI -> setup string
  3836. Return: CF clear if successful
  3837.     CF set on error
  3838.         AX = error code (01h) (see #0885 at AH=59h)
  3839. Note:    also supported by 10NET v5.0
  3840. SeeAlso: AX=5E03h,INT 2F/AX=111Fh
  3841. --------D-215E03-----------------------------
  3842. INT 21 - DOS 3.1+ network - GET NETWORK PRINTER SETUP STRING
  3843.     AX = 5E03h
  3844.     BX = redirection list index (see AX=5F02h)
  3845.     ES:DI -> 64-byte buffer for setup string
  3846. Return: CF clear if successful
  3847.         CX = length of setup string
  3848.         ES:DI buffer filled
  3849.     CF set on error
  3850.         AX = error code (01h) (see #0885 at AH=59h)
  3851. Note:    also supported by 10NET v5.0, but 10NET is documented as using DS:SI
  3852.       instead of ES:DI
  3853. SeeAlso: AX=5E02h,INT 2F/AX=111Fh
  3854. --------D-215E04-----------------------------
  3855. INT 21 - DOS 3.1+ network - SET PRINTER MODE
  3856.     AX = 5E04h
  3857.     BX = redirection list index (see AX=5F02h)
  3858.     DX = mode
  3859.         bit 0: set if binary, clear if text (tabs expanded to blanks)
  3860. Return: CF set on error
  3861.         AX = error code (see #0885 at AH=59h)
  3862.     CF clear if successful
  3863. Note:    calls INT 2F/AX=111Fh with 5E04h on stack
  3864. SeeAlso: AX=5E05h"DOS",INT 2F/AX=111Fh
  3865. --------N-215E04-----------------------------
  3866. INT 21 - 10NET v5.0 - INITIATE PRINT JOB
  3867.     AX = 5E04h
  3868.     BX = zero-based redirection list index (see AX=5F02h)
  3869.     DS:DX -> extended workstation printer setup structure (see #0903)
  3870. Return: CF clear if successful
  3871.     CF set on error
  3872.         AX = error code (see #0885 at AH=59h)
  3873. SeeAlso: AX=5E05h"10NET",AX=5E06h"10NET"
  3874.  
  3875. Format of 10NET extended workstation printer setup structure:
  3876. Offset    Size    Description    (Table 0903)
  3877.  00h    BYTE    notification flags (see #0904)
  3878.  01h    BYTE    job control mask (see #0905)
  3879.  02h    WORD    days to retain file
  3880.  04h    WORD    test print length
  3881.  06h    BYTE    number of copies to print
  3882.  07h    BYTE    compression algorithm
  3883.  08h    BYTE    tab width (00h = don't expand)
  3884.  09h    BYTE    initiation type (00h normal, 01h non-spooled)
  3885.  0Ah 38 BYTEs    job start operation notification instructions
  3886.  30h 32 BYTEs    comment for job
  3887.  50h 64 BYTEs    output filename or non-spooled file
  3888.  
  3889. Bitfields for 10NET notification flags:
  3890. Bit(s)    Description    (Table 0904)
  3891.  0    user at print start
  3892.  1    operator at start, with reply
  3893.  2    user at print completion
  3894.  3    operator at completion, with reply
  3895.  4    user on queue switch
  3896.  5    operator on queue switch, with reply
  3897.  6    user on print error
  3898.  
  3899. Bitfields for 10NET job control mask:
  3900. Bit(s)    Description    (Table 0905)
  3901.  0    print banner page
  3902.  1    eject page at end of job
  3903.  2    mark as "held" (queue but don't print)
  3904.  3    rush job (queue at top)
  3905.  4    overwrite file with zeros before deletion
  3906.  5    hyperspool if possible
  3907. --------D-215E05-----------------------------
  3908. INT 21 - DOS 3.1+ network - GET PRINTER MODE
  3909.     AX = 5E05h
  3910.     BX = redirection list index (see AX=5F02h)
  3911. Return: CF set on error
  3912.         AX = error code (see #0885 at AH=59h)
  3913.     CF clear if successful
  3914.         DX = printer mode (see AX=5E04h)
  3915. Note:    calls INT 2F/AX=111Fh with 5E05h on stack
  3916. SeeAlso: AX=5E04h"DOS",INT 2F/AX=111Fh
  3917. --------N-215E05-----------------------------
  3918. INT 21 - 10NET v5.0 - TERMINATE PRINT JOB
  3919.     AX = 5E05h
  3920.     BX = zero-based redirection list index (see AX=5F02h)
  3921. Return: CF clear if successful
  3922.     CF set on error
  3923.         AX = error code (see #0885 at AH=59h)
  3924. Note:    this call resets the spool termination mode to "truncate"
  3925.       (see AX=5D08h)
  3926. SeeAlso: AX=5E04h"10NET",AX=5E06h
  3927. --------N-215E06-----------------------------
  3928. INT 21 - 10NET v5.0 - GET/SET 10NET WORKSTATION PRINTER SETUP STRUCTURE
  3929.     AX = 5E06h
  3930.     BX = zero-based redirection list index (see AX=5F02h)
  3931.     CX = operation (06h set, 07h get)
  3932.     DS:DX -> buffer for setup structure (same as first nine bytes of
  3933.           workstation printer setup) (see #0903)
  3934. Return: CF clear if successful
  3935.         DS:DX buffer updated on get
  3936.     CF set on error
  3937.         AX = error code (see #0885 at AH=59h)
  3938. SeeAlso: AX=5E04h"10NET",AX=5E05h"10NET"
  3939. --------D-215F00-----------------------------
  3940. INT 21 - DOS 3.1+ network - GET REDIRECTION MODE
  3941.     AX = 5F00h
  3942.     BL = redirection type
  3943.         03h printer
  3944.         04h disk drive
  3945. Return: CF set on error
  3946.         AX = error code (see #0885 at AH=59h)
  3947.     CF clear if successful
  3948.         BH = redirection state
  3949.         00h off
  3950.         01h on
  3951. Note:    calls INT 2F/AX=111Eh with AX on top of the stack
  3952. SeeAlso: AX=5F01h,INT 2F/AX=111Eh
  3953. --------D-215F01-----------------------------
  3954. INT 21 - DOS 3.1+ network - SET REDIRECTION MODE
  3955.     AX = 5F01h
  3956.     BL = redirection type
  3957.         03h printer
  3958.         04h disk drive
  3959.     BH = redirection state
  3960.         00h off
  3961.         01h on
  3962. Return: CF set on error
  3963.         AX = error code (see #0885 at AH=59h)
  3964.     CF clear if successful
  3965. Notes:    when redirection is off, the local device (if any) rather than the
  3966.       remote device is used
  3967.     calls INT 2F/AX=111Eh with AX on top of the stack
  3968. SeeAlso: AX=5F00h,INT 2F/AX=111Eh,INT 60/AX=0002h
  3969. --------D-215F02-----------------------------
  3970. INT 21 - DOS 3.1+ network - GET REDIRECTION LIST ENTRY
  3971.     AX = 5F02h
  3972.     BX = zero-based redirection list index
  3973.     CX = 0000h (LANtastic)
  3974.     DS:SI -> 16-byte buffer for ASCIZ local device name or drive letter
  3975.           followed by colon
  3976.     ES:DI -> 128-byte buffer for ASCIZ network name
  3977. Return: CF clear if successful
  3978.         BH = device status
  3979.         00h valid
  3980.         01h invalid
  3981.         02h valid (connected from inside Windows for Workgroups v3.11)
  3982.         BL = device type
  3983.         03h printer
  3984.         04h disk drive
  3985.         CX = user data previously set with AX=5F03h
  3986.         DS:SI and ES:DI buffers filled
  3987.         DX,BP destroyed
  3988.     CF set on error
  3989.         AX = error code (01h,12h) (see #0885 at AH=59h)
  3990. Notes:    this function is passed through to INT 2F/AX=111Eh by the DOS kernel
  3991.     error code 12h is returned if BX is greater than the size of the list
  3992.     also supported by Banyan VINES, PC-NFS, LANtastic, and 10NET
  3993.     the returned device name may or may not include a colon, depending on
  3994.       the network software
  3995. SeeAlso: AX=5F03h,AX=5F46h,INT 2F/AX=111Eh
  3996. --------D-215F03-----------------------------
  3997. INT 21 - DOS 3.1+ network - REDIRECT DEVICE
  3998.     AX = 5F03h
  3999.     BL = device type
  4000.         03h printer
  4001.         04h disk drive
  4002.     CX = user data to save
  4003.         0000h for LANtastic
  4004.         4E57h ("NW") for NetWare 4.0 requester
  4005.     DS:SI -> ASCIZ local device name (16 bytes max)
  4006.     ES:DI -> ASCIZ network name + ASCIZ password (128 bytes max total)
  4007. Return: CF clear if successful
  4008.     CF set on error
  4009.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see #0885 at AH=59h)
  4010. Notes:    if device type is disk drive, DS:SI must point at either a null string
  4011.       or a string consisting the drive letter followed by a colon; if a
  4012.       null string, the network attempts to access the destination without
  4013.       redirecting a local drive
  4014.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  4015.     also supported by Banyan VINES, LANtastic, and 10NET
  4016. SeeAlso: AX=5F02h,AX=5F04h,INT 2F/AX=111Eh,INT 60/AX=0002h
  4017. --------D-215F04-----------------------------
  4018. INT 21 - DOS 3.1+ network - CANCEL REDIRECTION
  4019.     AX = 5F04h
  4020.     DS:SI -> ASCIZ local device name or path
  4021.     CX = 4E57h ("NW") for NetWare 4.0 requester
  4022. Return: CF clear if successful
  4023.     CF set on error
  4024.         AX = error code (01h,03h,05h,08h,0Fh,12h) (see #0885 at AH=59h)
  4025. Notes:    the DS:SI string must be either a local device name, a drive letter
  4026.       followed by a colon, or a network directory beginning with two
  4027.       backslashes
  4028.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  4029.     also supported by Banyan VINES, LANtastic, and 10NET
  4030. SeeAlso: AX=5F03h,INT 2F/AX=111Eh,INT 60/AX=0003h
  4031. --------D-215F05-----------------------------
  4032. INT 21 - DOS 4+ network - GET EXTENDED REDIRECTION LIST ENTRY
  4033.     AX = 5F05h
  4034.     BX = redirection list index
  4035.     DS:SI -> buffer for ASCIZ source device name
  4036.     ES:DI -> buffer for destination ASCIZ network path
  4037. Return: CF set on error
  4038.         AX = error code (see #0885 at AH=59h)
  4039.     CF clear if successful
  4040.         AX = server's network process ID handle (10NET)
  4041.         BH = device status flag (bit 0 clear if valid)
  4042.         BL = device type (03h if printer, 04h if drive)
  4043.         CX = stored parameter value (user data) from AX=5F03h
  4044.         BP = NETBIOS local session number
  4045.         DS:SI buffer filled
  4046.         ES:DI buffer filled
  4047. Notes:    the local session number allows sharing the redirector's session number
  4048.     if an error is caused on the NETBIOS LSN, the redirector may be unable
  4049.       to correctly recover from errors
  4050.     the DOS kernel calls INT 2F/AX=111Eh with AX on top of the stack
  4051.     supported by DR-DOS 5.0
  4052.     also supported by 10NET v5.0
  4053. SeeAlso: AX=5F06h"Network",INT 2F/AX=111Eh
  4054. --------O-215F05-----------------------------
  4055. INT 21 - STARLITE architecture - MAP LOCAL DRIVE LETTER TO REMOTE FILE SYSTEM
  4056.     AX = 5F05h
  4057.     DL = drive number (0=A:)
  4058.     DS:SI -> ASCIZ name of the object to map the drive to
  4059. Return: CF set on error
  4060.         AX = error code (see #0885 at AH=59h)
  4061.     CF clear if successful
  4062. SeeAlso: AX=5F06h"STARLITE",INT 60/AX=0002h
  4063. --------N-215F06-----------------------------
  4064. INT 21 U - Network - GET FULL REDIRECTION LIST
  4065.     AX = 5F06h
  4066.     ???
  4067. Return: ???
  4068. Notes:    similar to AX=5F02h and AX=5F05h, but also returns redirections
  4069.       excluded from those calls for various reasons
  4070.     calls INT 2F/AX=111Eh with AX on top of the stack
  4071. SeeAlso: AX=5F05h"DOS",INT 2F/AX=111Eh
  4072. --------O-215F06-----------------------------
  4073. INT 21 - STARLITE architecture - UNMAP DRIVE LETTER
  4074.     AX = 5F06h
  4075.     DL = drive to be unmapped (0=A:)
  4076. Return: CF set on error
  4077.         AX = error code (see #0885 at AH=59h)
  4078.     CF clear if successful
  4079. SeeAlso: AX=5F05h"STARLITE",INT 60/AX=0003h
  4080. --------D-215F07-----------------------------
  4081. INT 21 - DOS 5+ - ENABLE DRIVE
  4082.     AX = 5F07h
  4083.     DL = drive number (0=A:)
  4084. Return: CF clear if successful
  4085.     CF set on error
  4086.         AX = error code (0Fh) (see #0885 at AH=59h)
  4087. Notes:    simply sets the "valid" bit in the drive's CDS
  4088.     this function is not supported by Novell DOS 7
  4089. SeeAlso: AH=52h,AX=5F08h"DOS"
  4090. --------O-215F07-----------------------------
  4091. INT 21 - STARLITE architecture - MAKE NAMED OBJECT AVAILABLE ON NETWORK
  4092.     AX = 5F07h
  4093.     DS:SI -> ASCIZ name of object to offer to network
  4094.     ES:DI -> ASCIZ name under which object will be known on the network
  4095.         MUST begin with three slashes
  4096. Return: CF set on error
  4097.         AX = error code (see #0885 at AH=59h)
  4098.     CF clear if successful
  4099. SeeAlso: AX=5F08h"STARLITE"
  4100. --------D-215F08-----------------------------
  4101. INT 21 - DOS 5+ - DISABLE DRIVE
  4102.     AX = 5F08h
  4103.     DL = drive number (0=A:)
  4104. Return: CF clear if successful
  4105.     CF set on error
  4106.         AX = error code (0Fh) (see #0885 at AH=59h)
  4107. Notes:    simply clears the "valid" bit in the drive's CDS
  4108.     this function is not supported by Novell DOS 7
  4109. SeeAlso: AH=52h,AX=5F07h"DOS"
  4110. --------O-215F08-----------------------------
  4111. INT 21 - STARLITE architecture - REMOVE GLOBAL NETWORK NAME OF OBJECT
  4112.     AX = 5F08h
  4113.     DS:SI -> ASCIZ network name (not local name) of object to unshare
  4114. Return: CF set on error
  4115.         AX = error code (see #0885 at AH=59h)
  4116.     CF clear if successful
  4117. SeeAlso: AX=5F07h"STARLITE"
  4118. --------O-215F09-----------------------------
  4119. INT 21 - STARLITE architecture - BIND TO NETWORK DEVICE
  4120.     AX = 5F09h
  4121.     DS:DX -> ASCIZ name of the device driver to attach to
  4122. Return: CF set on error
  4123.         AX = error code (see #0885 at AH=59h)
  4124.     CF clear if successful
  4125. Note:    the STARLITE distributed file system can attach to multiple networks
  4126.       simultaneously
  4127. SeeAlso: AX=5F0Ah
  4128. --------O-215F0A-----------------------------
  4129. INT 21 - STARLITE architecture - DETACH FROM NETWORK DEVICE
  4130.     AX = 5F0Ah
  4131.     DS:DX -> ASCIZ name of device driver to detach from
  4132. Return: CF set on error
  4133.         AX = error code (see #0885 at AH=59h)
  4134.     CF clear if successful
  4135. SeeAlso: AX=5F09h
  4136. --------N-215F30-----------------------------
  4137. INT 21 U - LAN Manager Enhanced DOS - GET REDIRECTOR VERSION
  4138.     AX = 5F30h
  4139. Return: AX = version (AH=major,AL=minor)
  4140. --------N-215F32-----------------------------
  4141. INT 21 u - Named Pipes - LOCAL DosQNmPipeInfo
  4142.     AX = 5F32h
  4143.     BX = handle
  4144.     CX = size of _PIPEINFO structure
  4145.     DX = level (must be 0001h)
  4146.     DS:SI -> _PIPEINFO structure (see #0906)
  4147. Return: CF clear if successful
  4148.         _PIPEINFO structure filled in
  4149.     CF set on error
  4150.         AX = error code
  4151. Note:    this function was introduced by LAN Manager but is also supported by
  4152.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4153.       Machines, and others
  4154. SeeAlso: AX=5F33h,AX=5F34h
  4155.  
  4156. Format of Named Pipes _PIPEINFO structure:
  4157. Offset    Size    Description    (Table 0906)
  4158.  00h    WORD    size of outgoing buffer
  4159.  02h    WORD    size of incoming buffer
  4160.  04h    BYTE    maximum number of instances allowed
  4161.  05h    BYTE    current number of instances
  4162.  06h    BYTE    length of the name (including terminating NUL)
  4163.  07h  N BYTEs    name
  4164. --------N-215F33-----------------------------
  4165. INT 21 u - Named Pipes - LOCAL DosQNmPHandState
  4166.     AX = 5F33h
  4167.     BX = handle
  4168. Return: CF clear if successful
  4169.         AH = pipe mode bit mask (see #0907)
  4170.         AL = maximum number of instances
  4171.     CF set on error
  4172.         AX = error code
  4173. Note:    this function was introduced by LAN Manager but is also supported by
  4174.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4175.       Machines, and others
  4176. SeeAlso: AX=5F32h,AX=5F34h
  4177.  
  4178. Bitfields for Named Pipes pipe mode:
  4179. Bit(s)    Description    (Table 0907)
  4180.  7    set if nonblocking, clear if blocking
  4181.  6    set if server end, clear if client end
  4182.  2    set if write in message mode, clear if write in byte mode
  4183.  0    set if read in message mode, clear if read in byte mode
  4184. --------N-215F34-----------------------------
  4185. INT 21 u - Named Pipes - LOCAL DosSetNmPHandState
  4186.     AX = 5F34h
  4187.     BX = handle
  4188.     CX = pipe mode bit mask
  4189.         bit 15: set if nonblocking, clear if blocking
  4190.         bit     8: set if read in message mode, clear if read in byte mode
  4191. Return: CF clear if successful
  4192.     CF set if error
  4193.         AX = error code
  4194. Note:    this function was introduced by LAN Manager but is also supported by
  4195.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4196.       Machines, and others
  4197. SeeAlso: AX=5F32h,AX=5F33h,AX=5F36h
  4198. --------N-215F35-----------------------------
  4199. INT 21 u - Named Pipes - LOCAL DosPeekNmPipe
  4200.     AX = 5F35h
  4201.     BX = handle
  4202.     CX = buffer length
  4203.     DS:SI -> buffer
  4204. Return:    CF set on error
  4205.         AX = error code
  4206.     CF clear if successful (LAN Manager v1-v2)
  4207.     AX = 0000h if successful (LAN Manager 3.x)
  4208.     ---if successful---
  4209.         CX = bytes read
  4210.         SI = bytes left in the pipe
  4211.         DX = bytes left in the current message
  4212.         AX = pipe status (v1-v2) (see #0908)
  4213.         DI = pipe status (v3.x)
  4214. Note:    this function was introduced by LAN Manager but is also supported by
  4215.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4216.       Machines, and others
  4217. SeeAlso: AX=5F38h,AX=5F39h,AX=5F51h
  4218.  
  4219. (Table 0908)
  4220. Values for pipe status:
  4221.  0001h    disconnected
  4222.  0002h    listening
  4223.  0003h    connected
  4224.  0004h    closing
  4225. --------N-215F36-----------------------------
  4226. INT 21 u - Named Pipes - LOCAL DosTransactNmPipe
  4227.     AX = 5F36h
  4228.     BX = handle
  4229.     CX = in buffer length
  4230.     DS:SI -> in buffer
  4231.     DX = out buffer length
  4232.     ES:DI -> out buffer
  4233. Return: CF clear if successful
  4234.         CX = bytes read
  4235.     CF set on error
  4236.         AX = error code
  4237. Note:    this function was introduced by LAN Manager but is also supported by
  4238.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4239.       Machines, and others
  4240. SeeAlso: AX=5F34h,AX=5F37h
  4241. --------N-215F37-----------------------------
  4242. INT 21 u - Named Pipes - DosCallNmPipe
  4243.     AX = 5F37h
  4244.     DS:SI -> DosCallNmPipe stack frame (see #0909)
  4245. Return: CF clear if successful
  4246.         CX = bytes read
  4247.     CF set on error
  4248.         AX = error code
  4249. Note:    this function was introduced by LAN Manager but is also supported by
  4250.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4251.       Machines, and others
  4252. SeeAlso: AX=5F36h,AX=5F38h
  4253.  
  4254. Format of Named Pipes DosCallNmPipe stack frame:
  4255. Offset    Size    Description    (Table 0909)
  4256.  00h    DWORD    timeout
  4257.  04h    DWORD    -> bytes read WORD (not used!!)
  4258.  08h    WORD    out buffer length
  4259.  0Ah    DWORD    address of out buffer
  4260.  0Eh    WORD    in buffer length
  4261.  10h    DWORD    address of in buffer
  4262.  14h    DWORD    address of pipe name
  4263. --------N-215F38-----------------------------
  4264. INT 21 u - Named Pipes - LOCAL DosWaitNmPipe - AWAIT AVAIL. OF PIPE INSTANCE
  4265.     AX = 5F38h
  4266.     DS:DX -> pipe name
  4267.     BX:CX = timeout value
  4268. Return: CF clear if successful
  4269.     CF set if error
  4270.         AX = error code
  4271. Notes:    when a client gets a return code of ERROR_PIPE_BUSY on attempting to
  4272.       open a pipe, it should issue this call to wait until the pipe
  4273.       instance becomes available again; on return from this call, the
  4274.       client must attempt to open the pipe once again
  4275.     this function was introduced by LAN Manager but is also supported by
  4276.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4277.       Machines, and others
  4278. SeeAlso: AX=5F37h,AX=5F39h
  4279. --------N-215F39-----------------------------
  4280. INT 21 U - Named Pipes - LOCAL DosRawReadNmPipe
  4281.     AX = 5F39h
  4282.     BX = handle
  4283.     CX = buffer length
  4284.     DS:DX -> buffer
  4285. Return: CF clear if successful
  4286.         CX = bytes read
  4287.     CF set if error
  4288.         AX = error code
  4289. Notes:    this function was introduced by LAN Manager but is also supported by
  4290.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4291.       Machines, and others
  4292.     not documented in the LAN Manager Toolkit
  4293. SeeAlso: AX=5F35h,AX=5F3Ah,INT 2F/AX=1186h
  4294. --------N-215F3A-----------------------------
  4295. INT 21 U - Named Pipes - LOCAL DosRawWriteNmPipe
  4296.     AX = 5F3Ah
  4297.     BX = handle
  4298.     CX = buffer length
  4299.     DS:DX -> buffer
  4300. Return: CF clear if successful
  4301.         CX = bytes written
  4302.     CF set if error
  4303.         AX = error code
  4304. Notes:    this function was introduced by LAN Manager but is also supported by
  4305.       the Novell DOS Named Pipe Extender, Banyan VINES, OS/2 Virtual DOS
  4306.       Machines, and others
  4307.     not documented in the LAN Manager Toolkit
  4308. SeeAlso: AX=5F39h,AX=5F3Bh,INT 2F/AX=118Fh
  4309. --------N-215F3B-----------------------------
  4310. INT 21 u - LAN Manager Enhanced DOS - NetHandleSetInfo
  4311.     AX = 5F3Bh
  4312.     BX = handle
  4313.     CX = handle_info_1 structure length or sizeof DWORD
  4314.     DI = parameter number to set
  4315.         0000h all
  4316.         0001h number of milliseconds
  4317.         0002h number of characters
  4318.     DS:DX -> handle_info_1 structure (DI=0000h) (see #0910)
  4319.         or DWORD (DI=0001h or 0002h)
  4320.     SI = level of information (0001h)
  4321. Return: CF clear if successful
  4322.         CX = total bytes available
  4323.     CF set if error
  4324.         AX = error code
  4325. SeeAlso: AX=5F3Ch
  4326.  
  4327. Format of LAN Manager handle_info_1 structure:
  4328. Offset    Size    Description    (Table 0910)
  4329.  00h    DWORD    number of milliseconds which workstation collects data before
  4330.           it sends the data to the named pipe
  4331.  04h    DWORD    number of characters which workstation collects before it
  4332.           sends the data to the named pipe
  4333. --------N-215F3C-----------------------------
  4334. INT 21 u - LAN Manager Enhanced DOS - NetHandleGetInfo
  4335.     AX = 5F3Ch
  4336.     BX = handle
  4337.     CX = length of handle_info_1 structure
  4338.     DS:DX -> handle_info_1 structure (see #0910)
  4339.     SI = level of information (must be 0001h)
  4340. Return: CF clear if successful
  4341.         CX = total bytes available
  4342.     CF set if error
  4343.         AX = error code
  4344. SeeAlso: AX=5F3Bh
  4345. --------N-215F3D-----------------------------
  4346. INT 21 U - LAN Manager Enhanced DOS - WRITE MAILSLOT???
  4347.     AX = 5F3Dh
  4348.     ???
  4349. Return: ???
  4350. --------N-215F3E-----------------------------
  4351. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetSpecialSMB
  4352.     AX = 5F3Eh
  4353.     ???
  4354. Return: ???
  4355. Note:    This function is not documented anywhere in the LAN Manager 2.x Toolkit
  4356.       but was documented in LAN Manager 1.x manuals.
  4357. --------N-215F3F-----------------------------
  4358. INT 21 U - LAN Manager Enhanced DOS - REMOTE API CALL
  4359.     AX = 5F3Fh
  4360.     CX = api number
  4361.     ES:DI -> data descriptor
  4362.     ES:SI -> parameter descriptor
  4363.     ES:DX -> auxiliary descriptor (if DX <> 0)
  4364.     ???
  4365. Return: ???
  4366. --------N-215F40-----------------------------
  4367. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetMessageBufferSend
  4368.     AX = 5F40h
  4369.     DS:DX -> NetMessageBufferSend parameter structure (see #0911)
  4370. Return: AX = error code
  4371.  
  4372. Format of LAN Manager NetMessageBufferSend parameter structure:
  4373. Offset    Size    Description    (Table 0911)
  4374.  00h    DWORD    -> recipient name (name for specific user, name* for domain
  4375.               wide name, * for broadcast)
  4376.  04h    DWORD    -> buffer
  4377.  08h    WORD    length of buffer
  4378. --------N-215F41-----------------------------
  4379. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceEnum
  4380.     AX = 5F41h
  4381.     BL = level of detail (0000h, 0001h or 0002h)
  4382.     CX = buffer length
  4383.     ES:DI -> buffer of service_info_0, service_info_1, or service_info_2
  4384.         (see #0912,#0913,#0914)
  4385. Return: CF clear if successful
  4386.         CX = entries read
  4387.         DX = total available
  4388.     CF set on error
  4389.         AX = error code
  4390.  
  4391. Format of LAN Manager service_info_0 structure:
  4392. Offset    Size    Description    (Table 0912)
  4393.  00h 16 BYTEs    name
  4394. SeeAlso: #0913,#0914
  4395.  
  4396. Format of service_info_1 structure:
  4397. Offset    Size    Description    (Table 0913)
  4398.  00h 16 BYTEs    name
  4399.  10h    WORD    status bitmask (see #0915)
  4400.  12h    DWORD    status code (see #0916)
  4401.         (also see Microsoft LAN Manager Programmer's Reference)
  4402.  16h    WORD    process id
  4403. SeeAlso: #0912,#0914
  4404.  
  4405. Format of service_info_2 structure:
  4406. Offset    Size    Description    (Table 0914)
  4407.  00h 16 BYTEs    name
  4408.  10h    WORD    status bitmask (see #0915)
  4409.  12h    DWORD    status code (see #0916)
  4410.  16h    WORD    process id
  4411.  18h 64 BYTEs    text
  4412. SeeAlso: #0912,#0913
  4413.  
  4414. Bitfields for LAN Manager status bitmask:
  4415. Bit(s)    Description    (Table 0915)
  4416.  0,1    00 uninstall
  4417.         01 install pending
  4418.         10 uninstall pending
  4419.         11 installed
  4420.  2,3    00 active
  4421.         01 Continue pending
  4422.         10 Pause pending
  4423.         11 paused
  4424.  4    uninstallable
  4425.  5    pausable
  4426.  8    disk redirector paused
  4427.  9    spooled device redirector paused (printing)
  4428.  10    communication device redirector paused
  4429.  
  4430. (Table 0916)
  4431. Values for LAN Manager status code:
  4432.  high word
  4433.     3051 Bad parameter value
  4434.     3052 A parameter is missing
  4435.     3053 An unknown parameter was specified
  4436.     3054 The resource is insufficient
  4437.     3055 Configuration is faulty
  4438.     3056 An MS-DOS or MS OS/2 error occured
  4439.     3057 An internal error occured
  4440.     3058 An ambiguous parameter name was given
  4441.     3059 A duplicate parameter exists
  4442.     3060 The service was terminated by NetSeviceControl when it did not respond
  4443.     3061 The service program file could not be executed
  4444.     3062 The subservice failed to start
  4445.     3063 There is a conflict in the value or use of these parameters
  4446.     3064 There is a problem with the file
  4447.  low word
  4448.     3070 There is insufficient memory
  4449.     3071 There is insufficeient disk space
  4450.     3072 Unable to create thread
  4451.     3073 Unable to create process
  4452.     3074 A security failure occured
  4453.     3075 There is bad or missing default path
  4454.     3076 Network software is not installed
  4455.     3077 Server software is not installed
  4456.     3078 The server could not access the UAS database
  4457.     3079 The action requires user-level security
  4458.     3080 The log directory is invalid
  4459.     3081 The LAN group specificed could not be used
  4460.     3082 The computername is being used as a message alias on another computer
  4461.     3083 The workstation failed to announce the servername
  4462.     3084 The user accounts system is not configured properly
  4463. --------N-215F42-----------------------------
  4464. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServiceControl
  4465.     AX = 5F42h
  4466.     DH = opcode
  4467.         00h interrogate status
  4468.         01h pause
  4469.         02h continue
  4470.         03h uninstall
  4471.     DL = argument
  4472.         01h disk resource
  4473.         02h print resource
  4474.         04h communications resource (not implemented for DOS)
  4475.     ES:BX -> NetServiceControl parameter structure (see #0917)
  4476. Return: CF clear if successful
  4477.     CF set on error
  4478.         AX = error code
  4479.  
  4480. Format of LAN Manager NetServiceControl parameter structure:
  4481. Offset    Size    Description    (Table 0917)
  4482.  00h    DWORD    -> service name
  4483.  04h    WORD    result buffer size
  4484.  06h    DWORD    -> result buffer as service_info_2 structure
  4485. --------N-215F43-----------------------------
  4486. INT 21 u - LAN Manager Enhanced DOS - LOCAL DosPrintJobGetId
  4487.     AX = 5F43h
  4488.     BX = handle of remote print job
  4489.     CX = size of PRIDINFO struture
  4490.     ES:DI -> PRIDINFO structure (see #0918)
  4491. Return: CF clear if successful
  4492.         PRIDINFO filled in
  4493.     CF set on error
  4494.         AX = error code
  4495.  
  4496. Format of LAN Manager PRIDINFO structure:
  4497. Offset    Size    Description    (Table 0918)
  4498.  00h    WORD    job id
  4499.  02h 16 BYTEs    server name
  4500.  12h 13 BYTEs    queue name
  4501.  1Fh  1 BYTE    pad
  4502. --------N-215F44-----------------------------
  4503. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaGetInfo
  4504.     AX = 5F44h
  4505.     BX = information level (00h, 01h, or 0Ah)
  4506.     CX = buffer size
  4507.     ES:DI -> buffer in which to store info
  4508. Return: AX = error code
  4509.     DX = amount of buffer used (or required)
  4510. SeeAlso: AX=5F45h,AX=5F49h
  4511. --------N-215F45-----------------------------
  4512. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetWkstaSetInfo
  4513.     AX = 5F45h
  4514.     BX = level (0000h or 0001h)
  4515.     CX = buffer size
  4516.     DX = parameter to set
  4517.     ES:DI -> buffer
  4518. Return: CF clear if successful
  4519.     CF set if error
  4520.         AX = error code
  4521. SeeAlso: AX=5F44h
  4522. --------N-215F46-----------------------------
  4523. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseEnum
  4524.     AX = 5F46h
  4525.     BX = level (0000h or 0001h)
  4526.     CX = size of buffer
  4527.     ES:DI -> buffer of use_info_0 or use_info_1 structures
  4528.           (see #0919,#0920)
  4529. Return: CF clear if successful
  4530.         CX = entries read
  4531.         DX = total available entries
  4532.     CF set if error
  4533.         AX = error code
  4534. SeeAlso: AX=5F47h,AX=5F48h,AX=5F4Ch
  4535.  
  4536. Format of LAN Manager use_info_0 structure:
  4537. Offset    Size    Description    (Table 0919)
  4538.  00h  9 BYTEs    local device name
  4539.  09h    BYTE    padding
  4540.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  4541. SeeAlso: #0920
  4542.  
  4543. Format of LAN Manager use_info_1 structure:
  4544. Offset    Size    Description    (Table 0920)
  4545.  00h  9 BYTEs    Local device name
  4546.  09h    BYTE    padding
  4547.  0Ah    DWORD    -> remote device name in UNC form \\server\share
  4548.  0Eh    DWORD    -> password
  4549.  12h    WORD    network link status
  4550.         (00h OK, 02h disconnected, else unsure)
  4551.  14h    WORD    use type (-1 wildcard, 0 disk, 1 print, 2 com, 3 ipc)
  4552.  16h    WORD    ignored
  4553.  18h    WORD    ignored
  4554. SeeAlso: #0919
  4555. --------N-215F47-----------------------------
  4556. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseAdd
  4557.     AX = 5F47h
  4558.     BX = level (0001h)
  4559.     CX = size of use_info_1 structure
  4560.     ES:DI -> use_info_1 structure (see #0920)
  4561. Return: CF clear on success
  4562.     CF set on error
  4563.         AX = error code
  4564. SeeAlso: AX=5F46h,AX=5F48h
  4565. --------N-215F48-----------------------------
  4566. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetUseDel
  4567.     AX = 5F48h
  4568.     BX = force level
  4569.         0000h no force
  4570.         0001h force
  4571.         0002h lots of force
  4572.     ES:DI -> buffer as either the local device name or UNC remote name
  4573. Return: CF clear on success
  4574.     CF set on error
  4575.         AX = error code
  4576. SeeAlso: AX=5F46h,AX=5F48h,AX=5F49h
  4577. --------N-215F49-----------------------------
  4578. INT 21 u - LAN Manager Enhanced DOS - NetUseGetInfo
  4579.     AX = 5F49h
  4580.     DS:DX -> NetUseGetInfo parameter structure (see #0921)
  4581. Return: CF clear on success
  4582.         DX = total available
  4583.     CF set on error
  4584.         AX = error code
  4585. SeeAlso: AX=5F44h,AX=5F47h
  4586.  
  4587. Format of LAN Manager NetUseGetInfo parameter structure:
  4588. Offset    Size    Description    (Table 0921)
  4589.  00h    DWORD    pointer to either the local device name or UNC remote name
  4590.  04h    WORD    level of information (0000h or 0001h)
  4591.  06h    DWORD    pointer to buffer of use_info_0 or use_info_1 structures
  4592.  0Ah    WORD    length of buffer
  4593. --------N-215F4A-----------------------------
  4594. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteCopy
  4595.     AX = 5F4Ah
  4596.     DS:DX -> NetRemoteCopy parameter structure (see #0922)
  4597. Return: CF clear if successful
  4598.     CF set on error
  4599.         AX = error code
  4600. SeeAlso: AX=5F4Bh
  4601.  
  4602. Format of LAN Manager NetRemoteCopy parameter structure:
  4603. Offset    Size    Description    (Table 0922)
  4604.  00h    DWORD    -> source name as UNC
  4605.  04h    DWORD    -> destination name as UNC
  4606.  08h    DWORD    -> source password
  4607.  0Ch    DWORD    -> destination password
  4608.  10h    WORD    destination open bitmap
  4609.         if destination path exists
  4610.             0000h open fails
  4611.             0001h file is appended
  4612.             0002h file is overwritten
  4613.         if destination path doesn't exist
  4614.             0000h open fails
  4615.             0010h file is created
  4616.  12h    WORD    copy control bitmap (see #0923)
  4617.  14h    DWORD    -> copy_info buffer
  4618.  18h    WORD    length of copy_info buffer
  4619.  
  4620. Bitfields for LAN Manager copy control:
  4621. Bit(s)    Description    (Table 0923)
  4622.  0    destination must be a file
  4623.  1    destination must be a directory
  4624.  2    destination is opened in ascii mode instead of binary
  4625.  3    source is opened in ascii mode instead of binary
  4626.  4    verify all write operations
  4627. --------N-215F4B-----------------------------
  4628. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetRemoteMove
  4629.     AX = 5F4Bh
  4630.     DS:DX -> NetRemoteMove parameter structure (see #0924)
  4631. Return: CF clear if successful
  4632.     CF set on error
  4633.         AX = error code
  4634. SeeAlso: AX=5F4Ah
  4635.  
  4636. Format of LAN Manager NetRemoteMove parameter structure:
  4637. Offset    Size    Description    (Table 0924)
  4638.  00h    DWORD    -> source name as UNC
  4639.  04h    DWORD    -> destination name as UNC
  4640.  08h    DWORD    -> source password
  4641.  0Ch    DWORD    -> destination password
  4642.  10h    WORD    destination open bitmap
  4643.         if destination path exists
  4644.             0000h open fails
  4645.             0001h file is appended
  4646.             0002h file is overwritten
  4647.         if destination path doesn't exist
  4648.             0000h open fails
  4649.             0010h file is created
  4650.  12h    WORD    move control bitmap
  4651.             0001h destination must be a file
  4652.             0002h destination must be a directory
  4653.  14h    DWORD    -> move_info buffer
  4654.  18h    WORD    length of move_info buffer
  4655. --------N-215F4C-----------------------------
  4656. INT 21 u - LAN Manager Enhanced DOS - LOCAL NetServerEnum
  4657.     AX = 5F4Ch
  4658.     BX = level (0000h or 0001h)
  4659.     CX = buffer length
  4660.     ES:DI -> buffer in which to store information
  4661. Return: CF clear if successful
  4662.         ES:DI -> server_info_X structures (depending on level)
  4663.           (see #0925,#0926)
  4664.         BX = entries read
  4665.         CX = total entries available
  4666.     CF set on error
  4667.         AX = error code
  4668. Notes:    this function is also supported by the Novell DOS Named Pipe Extender
  4669.     this function has been obseleted by NetServerEnum2
  4670. SeeAlso: AX=5F53h
  4671.  
  4672. Format of LAN Manager server_info_0 structure:
  4673. Offset    Size    Description    (Table 0925)
  4674.  00h 16 BYTEs    name
  4675. SeeAlso: #0926
  4676.  
  4677. Format of LAN Manager server_info_1 structure:
  4678. Offset    Size    Description    (Table 0926)
  4679.  00h 16 BYTEs    name
  4680.  10h    BYTE    major version in lower nibble
  4681.  11h    BYTE    minor version
  4682.  12h    DWORD    server type bitmask (see #0927)
  4683.  16h    DWORD    -> comment string
  4684. SeeAlso: #0925
  4685.  
  4686. Bitfields for LAN Manager server type:
  4687. Bit(s)    Description    (Table 0927)
  4688.  0    workstation
  4689.  1    server
  4690.  2    SQL server
  4691.  3    primary domain controller
  4692.  4    backup domain controller
  4693.  5    time server
  4694.  6    Apple File Protocol (AFP) server
  4695.  7    Novell server
  4696.  8    Domain Member (v2.1+)
  4697.  9    Print Queue server (v2.1+)
  4698.  10    Dialin server (v2.1+)
  4699.  11    Unix server (v2.1+)
  4700. --------N-215F4D-----------------------------
  4701. INT 21 u - LAN Manager Enhanced DOS - DosMakeMailslot
  4702.     AX = 5F4Dh
  4703.     BX = message size
  4704.     CX = mailslot size (must be bigger than message size by at least 1)
  4705.                (minimum 1000h, maximum FFF6h)
  4706.                (buffer must be 9 bytes bigger than this)
  4707.     DS:SI -> name
  4708.     ES:DI -> memory buffer
  4709. Return: CF clear if successful
  4710.         AX = handle
  4711.     CF set on error
  4712.         AX = error code
  4713. SeeAlso: AX=5F4Eh,AX=5F4Fh,AX=5F50h,AX=5F51h
  4714. --------N-215F4E-----------------------------
  4715. INT 21 u - LAN Manager Enhanced DOS - DosDeleteMailslot
  4716.     AX = 5F4Eh
  4717.     BX = handle
  4718. Return: CF clear if successful
  4719.         ES:DI -> memory to be freed (allocated during DosMakeMailslot)
  4720.     CF set on error
  4721.         AX = error code
  4722. SeeAlso: AX=5F4Dh,AX=5F4Fh
  4723. --------N-215F4F-----------------------------
  4724. INT 21 u - LAN Manager Enhanced DOS - DosMailslotInfo
  4725.     AX = 5F4Fh
  4726.     BX = handle
  4727. Return: CF clear if successful
  4728.         AX = max message size
  4729.         BX = mailslot size
  4730.         CX = next message size
  4731.         DX = next message priority
  4732.         SI = number of messages waiting
  4733.     CF set on error
  4734.         AX = error code
  4735. SeeAlso: AX=5F4Dh,AX=5F4Eh,AX=5F50h
  4736. --------N-215F50-----------------------------
  4737. INT 21 u - LAN Manager Enhanced DOS - DosReadMailslot
  4738.     AX = 5F50h
  4739.     BX = handle
  4740.     DX:CX = timeout
  4741.     ES:DI -> buffer
  4742. Return: CF clear if successful
  4743.         AX = bytes read
  4744.         CX = next item's size
  4745.         DX = next item's priority
  4746.     CF set on error
  4747.         AX = error code
  4748. SeeAlso: AX=5F4Dh,AX=5F4Fh,AX=5F51h,AX=5F52h
  4749. --------N-215F51-----------------------------
  4750. INT 21 u - LAN Manager Enhanced DOS - DosPeekMailslot
  4751.     AX = 5F51h
  4752.     BX = handle
  4753.     ES:DI -> buffer
  4754. Return: CF clear if successful
  4755.         AX = bytes read
  4756.         CX = next item's size
  4757.         DX = next item's priority
  4758.     CF set on error
  4759.         AX = error code
  4760. SeeAlso: AX=5F35h,AX=5F4Fh,AX=5F50h,AX=5F52h
  4761. --------N-215F52-----------------------------
  4762. INT 21 u - LAN Manager Enhanced DOS - DosWriteMailslot
  4763.     AX = 5F52h
  4764.     BX = class
  4765.     CX = length of buffer
  4766.     DX = priority
  4767.     ES:DI -> DosWriteMailslot parameter structure (see #0928)
  4768.     DS:SI -> mailslot name
  4769. Return: CF clear if successful
  4770.     CF set on error
  4771.         AX = error code
  4772. SeeAlso: AX=5F4Fh,AX=5F50h,AX=5F51h
  4773.  
  4774. Format of LAN Manager DosWriteMailslot parameter structure:
  4775. Offset    Size    Description    (Table 0928)
  4776.  00h    DWORD    timeout
  4777.  04h    DWORD    -> buffer
  4778. --------N-215F53-----------------------------
  4779. INT 21 u - LAN Manager Enhanced DOS - NetServerEnum2
  4780.     AX = 5F53h
  4781.     DS:SI -> NetServerEnum2 parameter structure (see #0929)
  4782. Return: CF clear if successful
  4783.         BX = entries read
  4784.         CX = total entries available
  4785.     CF set on error
  4786.         AX = error code
  4787. SeeAlso: AX=5F4Ch
  4788.  
  4789. Format of LAN Manager NetServerEnum2 parameter structure:
  4790. Offset    Size    Description    (Table 0929)
  4791.  00h    WORD    level (0000h or 0001h)
  4792.  02h    DWORD    -> buffer as array of server_info_??? structures (see #0931)
  4793.  06h    WORD    length of buffer
  4794.  08h    DWORD    server type bitmask (see #0930)
  4795.  0Ch    DWORD    -> Domain name (may be 0000h:0000h for all local domains)
  4796.  
  4797. Bitfields for LAN Manager server type:
  4798. Bit(s)    Description    (Table 0930)
  4799.  0    workstation
  4800.  1    server
  4801.  2    SQL server
  4802.  3    primary domain controller
  4803.  4    backup domain controller
  4804.  5    time server
  4805.  6    Apple File Protocol (AFP) server
  4806.  7    Novell server
  4807.  8    Domain Member (v2.1+)
  4808.  9    Print Queue server (v2.1+)
  4809.  10    Dialin server (v2.1+)
  4810.  11    Unix server (v2.1+)
  4811. Note:    set all (FFFFFFFFh) for All Types
  4812.  
  4813. Format of LAN Manager server_info_0 structure:
  4814. Offset    Size    Description    (Table 0931)
  4815.  00h 16 BYTEs    name
  4816. SeeAlso: #0932
  4817.  
  4818. Format of LAN Manager server_info_1 structure:
  4819. Offset    Size    Description    (Table 0932)
  4820.  00h 16 BYTEs    name
  4821.  10h    BYTE    major version in lower nibble
  4822.  11h    BYTE    minor version
  4823.  12h    DWORD    server type (bits 0-11) (see #0930)
  4824.  16h    DWORD    -> comment string
  4825. SeeAlso: #0931
  4826. --------N-215F55----------------------------
  4827. INT 21 U - LAN Manager Enhanced DOS - KILL ALL CONNECTIONS???
  4828.     AX = 5F55h
  4829.     BX = ???
  4830. Return: CF clear if successful
  4831.     CF set on error
  4832.         AX = error code
  4833. --------N-215F80-----------------------------
  4834. INT 21 - LANtastic - GET LOGIN ENTRY
  4835.     AX = 5F80h
  4836.     BX = login entry index (0-based)
  4837.     ES:DI -> 16-byte buffer for machine name
  4838. Return: CF clear if successful
  4839.         buffer filled with machine name ("\\" prefix removed)
  4840.         DL = adapter number (v3+)
  4841.     CF set on error
  4842.         AX = error code
  4843. Note:    the login entry index corresponds to the value BX used in AX=5F83h
  4844. SeeAlso: AX=5F83h
  4845. --------N-215F81-----------------------------
  4846. INT 21 - LANtastic - LOGIN TO SERVER
  4847.     AX = 5F81h
  4848.     ES:DI -> ASCIZ login path followed immediately by ASCIZ password
  4849.     BL = adapter number
  4850.         FFh try all valid adapters
  4851.         00h-07h try only specified adapter
  4852. Return: CF clear if successful
  4853.     CF set on error
  4854.         AX = error code
  4855. Notes:    login path is of form "\\machine\username"
  4856.     if no password is used, the string at ES:DI must be terminated with
  4857.       three NULs for compatibility with LANtastic v3.0.
  4858. SeeAlso: AX=5F82h,AX=5F84h
  4859. --------N-215F82-----------------------------
  4860. INT 21 - LANtastic - LOGOUT FROM SERVER
  4861.     AX = 5F82h
  4862.     ES:DI -> ASCIZ server name (in form "\\machine")
  4863. Return: CF clear if successful
  4864.     CF set on error
  4865.         AX = error code
  4866. SeeAlso: AX=5F81h,AX=5F88h,AX=5FCBh
  4867. --------N-215F83-----------------------------
  4868. INT 21 - LANtastic - GET USERNAME ENTRY
  4869.     AX = 5F83h
  4870.     BX = login entry index (0-based)
  4871.     ES:DI -> 16-byte buffer for username currently logged into
  4872. Return: CF clear if successful
  4873.         DL = adapter number (v3+)
  4874.     CF set on error
  4875.         AX = error code
  4876. Note:    the login entry index corresponds to the value BX used in AX=5F80h
  4877. SeeAlso: AX=5F80h
  4878. --------N-215F84-----------------------------
  4879. INT 21 - LANtastic - GET INACTIVE SERVER ENTRY
  4880.     AX = 5F84h
  4881.     BX = server index not currently logged into
  4882.     ES:DI -> 16-byte buffer for server name which is available for logging
  4883.         in to ("\\" prefix omitted)
  4884. Return: CF clear if successful
  4885.         DL = adapter number to non-logged in server is on
  4886.     CF set on error
  4887.         AX = error code
  4888. SeeAlso: AX=5F81h
  4889. --------N-215F85-----------------------------
  4890. INT 21 - LANtastic - CHANGE PASSWORD
  4891.     AX = 5F85h
  4892.     ES:DI -> buffer containing "\\machine\oldpassword" 00h "newpassword"00h
  4893. Return: CF clear if successful
  4894.     CF set on error
  4895.         AX = error code
  4896. Notes:    must be logged into the named machine
  4897.     this function is illegal for group accounts
  4898. --------N-215F86-----------------------------
  4899. INT 21 - LANtastic - DISABLE ACCOUNT
  4900.     AX = 5F86h
  4901.     ES:DI -> ASCIZ machine name and password in form "\\machine\password"
  4902. Return: CF clear if successful
  4903.     CF set on error
  4904.         AX = error code
  4905. Note:    must be logged into the named machine and concurrent logins set to 1
  4906.       by NET_MGR.  Requires system manager to re-enable account.
  4907. --------N-215F87-----------------------------
  4908. INT 21 - LANtastic v3+ - GET ACCOUNT
  4909.     AX = 5F87h
  4910.     DS:SI -> 128-byte buffer for account information (see #0933)
  4911.     ES:DI -> ASCIZ machine name in form "\\machine"
  4912. Return: CF clear if successful
  4913.     CF set on error
  4914.         AX = error code
  4915.     BX destroyed
  4916. Note:    must be logged into the specified machine
  4917.  
  4918. Format of LANtastic user account structure:
  4919. Offset    Size    Description    (Table 0933)
  4920.  00h 16 BYTEs    blank-padded username (zero-padded for v4.x)
  4921.  10h 16 BYTEs    reserved (00h)
  4922.  20h 32 BYTEs    user description
  4923.  40h    BYTE    privilege bits (see #0934)
  4924.  41h    BYTE    maximum concurrent users
  4925.  42h 42 BYTEs    bit map for disallowed half hours, beginning on Sunday
  4926.         (bit set if half-hour not an allowed time)
  4927.  6Ch    WORD    internal (0002h)
  4928.  6Eh  2 WORDs    last login time
  4929.  72h  2 WORDs    account expiration date (MS-DOS-format year/month:day)
  4930.  76h  2 WORDs    password expiration date (0 = none)
  4931.  7Ah    BYTE    number of days to extend password after change (1-31)
  4932.         00h if no extension required
  4933. ---v3.x---
  4934.  7Bh  5 BYTEs    reserved
  4935. ---v4.x---
  4936.  7Bh    BYTE    storage for first letter of user name when deleted (first
  4937.           character is changed to 00h when deleting account)
  4938.  7Ch    BYTE    extended privileges
  4939.  7Dh  3 BYTEs    reserved
  4940.  
  4941. Bitfields for LANtastic privilege bits:
  4942. Bit(s)    Description    (Table 0934)
  4943.  7    bypass access control lists
  4944.  6    bypass queue protection
  4945.  5    treat as local process
  4946.  4    bypass mail protection
  4947.  3    allow audit entry creation
  4948.  2    system manager
  4949.  0    user cannot change password
  4950. --------N-215F88-----------------------------
  4951. INT 21 - LANtastic v4.0+ - LOGOUT FROM ALL SERVERS
  4952.     AX = 5F88h
  4953. Return: CF clear if successful
  4954.     CF set on error
  4955.         AX = error code
  4956. SeeAlso: AX=5F82h
  4957. --------N-215F97-----------------------------
  4958. INT 21 - LANtastic - COPY FILE
  4959.     AX = 5F97h
  4960.     CX:DX = number of bytes to copy (FFFFFFFFh = entire file)
  4961.     SI = source file handle
  4962.     DI = destination file handle
  4963. Return: CF clear if successful
  4964.         DX:AX = number of bytes copied
  4965.     CF set on error
  4966.         AX = error code
  4967. Note:    copy is performed by server
  4968. --------N-215F98-----------------------------
  4969. INT 21 - LANtastic - SEND UNSOLICITED MESSAGE
  4970.     AX = 5F98h
  4971.     DS:SI -> message buffer (see #0935)
  4972. Return: CF clear if successful
  4973.     CF set on error
  4974.         AX = error code
  4975. Note:    v4.1- return no errors
  4976. SeeAlso: AX=5F99h
  4977.  
  4978. Format of LANtastic message buffer:
  4979. Offset    Size    Description    (Table 0935)
  4980.  00h    BYTE    reserved
  4981.  01h    BYTE    message type
  4982.         00h general
  4983.         01h server warning
  4984.         02h-7Fh reserved
  4985.         80h-FFh user-defined
  4986.  02h 16 BYTEs    ASCIZ destination machine name
  4987.  12h 16 BYTEs    ASCIZ server name which user must be logged into
  4988.  22h 16 BYTEs    ASCIZ user name
  4989.  32h 16 BYTEs    ASCIZ originating machine name (filled in when received)
  4990.  42h 80 BYTEs    message text
  4991. --------N-215F99-----------------------------
  4992. INT 21 - LANtastic - GET LAST RECEIVED UNSOLICITED MESSAGE
  4993.     AX = 5F99h
  4994.     ES:DI -> messsage buffer (see #0935)
  4995. Return: CF clear if successful
  4996.     CF set on error
  4997.         AX = error code
  4998. SeeAlso: AX=5F98h
  4999. --------N-215F9A-----------------------------
  5000. INT 21 - LANtastic - GET MESSAGE PROCESSING FLAGS
  5001.     AX = 5F9Ah
  5002. Return: CF clear if successful
  5003.         DL = bits describing processing of received messages (see #0936)
  5004.     CF set on error
  5005.         AX = error code
  5006. SeeAlso: AX=5F9Bh,AX=5F9Ch,AX=5F9Dh
  5007.  
  5008. Bitfields for unsolicited message processing flags:
  5009. Bit(s)    Description    (Table 0936)
  5010.  0    beep before message is delivered
  5011.  1    deliver message to message service
  5012.  2    pop up message automatically (v3+)
  5013. --------N-215F9B-----------------------------
  5014. INT 21 - LANtastic - SET MESSAGE PROCESSING FLAGS
  5015.     AX = 5F9Bh
  5016.     DL = bits describing processing for received unsolicited messages
  5017.          (see #0936)
  5018. Return: CF clear if successful
  5019.     CF set on error
  5020.         AX = error code
  5021. SeeAlso: AX=5F9Ah,AX=5F9Eh
  5022. --------N-215F9C-----------------------------
  5023. INT 21 - LANtastic v3+ - POP UP LAST RECEIVED MESSAGE
  5024.     AX = 5F9Ch
  5025.     CX = time to leave on screen in clock ticks
  5026.     DH = 0-based screen line on which to place message
  5027. Return: CF clear if successful
  5028.     CF set on error
  5029.         AX = error code (0Bh)
  5030. Notes:    the original screen contents are restored when the message is removed
  5031.     the message will not appear, and an error will be returned, if the
  5032.       screen is in a graphics mode
  5033. SeeAlso: AX=5F9Ah
  5034. --------N-215F9D-----------------------------
  5035. INT 21 - LANtastic v4.1+ - GET REDIRECTOR CONTROL BITS
  5036.     AX = 5F9Dh
  5037. Return: DL = redirector control bits
  5038.         bit 7: set to notify on print job completion
  5039. SeeAlso: AX=5F9Ah,AX=5F9Eh
  5040. --------N-215F9E-----------------------------
  5041. INT 21 - LANtastic v4.1+ - SET REDIRECTOR CONTROL BITS
  5042.     AX = 5F9Eh
  5043.     DL = redirector control bits (see AX=5F9Dh)
  5044. Return: nothing
  5045. SeeAlso: AX=5F9Bh,AX=5F9Dh
  5046. --------N-215FA0-----------------------------
  5047. INT 21 - LANtastic - GET QUEUE ENTRY
  5048.     AX = 5FA0h
  5049.     BX = queue entry index (0000h is first entry)
  5050.     DS:SI -> buffer for queue entry (see #0937)
  5051.     ES:DI -> ASCIZ server name in form "\\name"
  5052. Return: CF clear if successful
  5053.     CF set on error
  5054.         AX = error code
  5055.     BX = entry index for next queue entry (BX-1 is current index)
  5056. SeeAlso: AX=5FA1h,AX=5FA2h
  5057.  
  5058. Format of LANtastic queue entry:
  5059. Offset    Size    Description    (Table 0937)
  5060.  00h    BYTE    status of entry (see #0938)
  5061.  01h    DWORD    size of spooled file
  5062.  05h    BYTE    type of entry (see #0939)
  5063.  06h    BYTE    output control (see #0940)
  5064.  07h    WORD    number of copies
  5065.  09h    DWORD    sequence number of queue entry
  5066.  0Dh 48 BYTEs    pathname of spooled file
  5067.  3Dh 16 BYTEs    user who spooled file
  5068.  4Dh 16 BYTEs    name of machine from which file was spooled
  5069.  5Dh    WORD    date file was spooled (see #0877 at AX=5700h)
  5070.  5Fh    WORD    time file was spooled (see #0876 at AX=5700h)
  5071.  61h 17 BYTEs    ASCIZ destination device or user name
  5072.  72h 48 BYTEs    comment field
  5073.  
  5074. (Table 0938)
  5075. Values for status of LANtastic queue entry:
  5076.  00h    empty
  5077.  01h    being updated
  5078.  02h    being held
  5079.  03h    waiting for despool
  5080.  04h    being despooled
  5081.  05h    canceled
  5082.  06h    spooled file could not be accessed
  5083.  07h    destination could not be accessed
  5084.  08h    rush job
  5085.  
  5086. (Table 0939)
  5087. Values for type of LANtastic queue entry:
  5088.  00h    printer queue file
  5089.  01h    message
  5090.  02h    local file
  5091.  03h    remote file
  5092.  04h    to remote modem
  5093.  05h    batch processor file
  5094.  
  5095. Bitfields for output control:
  5096. Bit(s)    Description    (Table 0940)
  5097.  6    don't delete (for mail)
  5098.  5    mail file contains voice mail (v3+)
  5099.  4    mail message has been read
  5100.  3    response has been requested for this mail
  5101. --------N-215FA1-----------------------------
  5102. INT 21 - LANtastic - SET QUEUE ENTRY
  5103.     AX = 5FA1h
  5104.     BX = handle of opened queue entry
  5105.     DS:SI -> queue entry (see #0937)
  5106. Return: CF clear if successful
  5107.     CF set on error
  5108.         AX = error code
  5109. Notes:    the only queue entry fields which may be changed are output control,
  5110.       number of copies, destination device, and comment
  5111.     the handle in BX is that from a create or open (INT 21/AH=3Ch,3Dh)
  5112.       call on the file "\\server\\@MAIL" or "\\server\@name" (for
  5113.       printer queue entries)
  5114. SeeAlso: AX=5FA0h,AX=5FA2h,AX=5FA9h
  5115. --------N-215FA2-----------------------------
  5116. INT 21 - LANtastic - CONTROL QUEUE
  5117.     AX = 5FA2h
  5118.     BL = control command
  5119.         00h start despooling (privileged)
  5120.         01h halt despooling (privileged)
  5121.         02h halt despooling at end of job (privileged)
  5122.         03h pause despooler at end of job (privileged)
  5123.         04h print single job (privileged)
  5124.         05h restart current job (privileged)
  5125.         06h cancel the current job
  5126.         07h hold queue entry
  5127.         08h release a held queue entry
  5128.         09h make queue entry a rushed job (privileged)
  5129.     CX:DX = sequence number to control (commands 06h-09h)
  5130.     DX = physical printer number (commands 00h-05h)
  5131.         00h-02h LPT1-LPT3
  5132.         03h,04h COM1,COM2
  5133.         other    all printers
  5134.     ES:DI -> ASCIZ server name in form "\\machine"
  5135. Return: CF clear if successful
  5136.     CF set on error
  5137.         AX = error code
  5138. --------N-215FA3-----------------------------
  5139. INT 21 - LANtastic v3+ - GET PRINTER STATUS
  5140.     AX = 5FA3h
  5141.     BX = physical printer number (00h-02h = LPT1-LPT3, 03h-04h = COM1-COM2)
  5142.     DS:SI -> buffer for printer status (see #0941)
  5143.     ES:DI -> ASCIZ server name in form "\\machine"
  5144. Return: CF clear if successful
  5145.     CF set on error
  5146.         AX = error code
  5147.     BX = next physical printer number
  5148. Note:    you must be logged in to the specified server
  5149.  
  5150. Format of LANtastic printer status:
  5151. Offset    Size    Description    (Table 0941)
  5152.  00h    BYTE    printer state (see #0942)
  5153.  01h    WORD    queue index of print job being despooled
  5154.         FFFFh if not despooling--ignore all following fields
  5155.  03h    WORD    actual characters per second being output
  5156.  05h    DWORD    number of characters actually output so far
  5157.  09h    DWORD    number of bytes read from spooled file so far
  5158.  0Dh    WORD    copies remaining to print
  5159.  
  5160. Bitfields for LANtastic printer state:
  5161. Bit(s)    Description    (Table 0942)
  5162.  7    printer paused
  5163.  0-6    0 printer disabled
  5164.     1 will stop at end of job
  5165.     2 print multiple jobs
  5166. --------N-215FA4-----------------------------
  5167. INT 21 - LANtastic v3+ - GET STREAM INFO
  5168.     AX = 5FA4h
  5169.     BX = 0-based stream index number
  5170.     DS:SI -> buffer for stream information (see #0943)
  5171.     ES:DI -> ASCIZ machine name in form "\\machine"
  5172. Return: CF clear if successful
  5173.     CF set on error
  5174.         AX = error code
  5175.     BX = next stream number
  5176. SeeAlso: AX=5FA5h
  5177.  
  5178. Format of LANtastic stream information:
  5179. Offset    Size    Description    (Table 0943)
  5180.  00h    BYTE    queueing of jobs for logical printer (0=disabled,other=enabled)
  5181.  01h 11 BYTEs    logical printer resource template (may contain ? wildcards)
  5182. --------N-215FA5-----------------------------
  5183. INT 21 - LANtastic v3+ - SET STREAM INFO
  5184.     AX = 5FA5h
  5185.     BX = 0-based stream index number
  5186.     DS:SI -> buffer containing stream information (see #0943)
  5187.     ES:DI -> ASCIZ machine name in form "\\machine"
  5188. Return: CF clear if successful
  5189.     CF set on error
  5190.         AX = error code
  5191. SeeAlso: AX=5FA4h
  5192. --------N-215FA7-----------------------------
  5193. INT 21 - LANtastic - CREATE USER AUDIT ENTRY
  5194.     AX = 5FA7h
  5195.     DS:DX -> ASCIZ reason code (max 8 bytes)
  5196.     DS:SI -> ASCIZ variable reason string (max 128 bytes)
  5197.     ES:DI -> ASCIZ machine name in form "\\machine"
  5198. Return: CF clear if successful
  5199.     CF set on error
  5200.         AX = error code
  5201. Note:    you must be logged in to the specified server and have the "U"
  5202.       privilege to execute this call
  5203. --------N-215FA9-----------------------------
  5204. INT 21 - LANtastic v4.1+ - SET EXTENDED QUEUE ENTRY
  5205.     AX = 5FA9h
  5206.     BX = handle of opened queue entry
  5207.     DS:SI -> queue entry (see #0937)
  5208. Return: CF clear if successful
  5209.     CF set on error
  5210.         AX = error code
  5211. Note:    functions exactly the same as AX=5FA1h except the spooled filename is
  5212.       also set.  This call supports direct despooling.
  5213. SeeAlso: AX=5FA1h
  5214. --------N-215FB0-----------------------------
  5215. INT 21 - LANtastic - GET ACTIVE USER INFORMATION
  5216.     AX = 5FB0h
  5217.     BX = server login entry index
  5218.     DS:SI -> buffer for active user entry (see #0944)
  5219.     ES:DI -> ASCIZ machine name in form "\\server"
  5220. Return: CF clear if successful
  5221.     CF set on error
  5222.         AX = error code
  5223.     BX = next login index
  5224. SeeAlso: AX=5FB2h
  5225.  
  5226. Format of LANtastic active user entry:
  5227. Offset    Size    Description    (Table 0944)
  5228.  00h    WORD    virtual circuit number
  5229.  02h    BYTE    login state (see #0945)
  5230.  03h    BYTE    last command issued (see #0946)
  5231.  04h  5 BYTEs    number of I/O bytes (40-bit unsigned number)
  5232.  09h  3 BYTEs    number of server requests (24-bit unsigned)
  5233.  0Ch 16 BYTEs    name of user who is logged in
  5234.  1Ch 16 BYTEs    name of remote logged in machine
  5235.  2Ch    BYTE    extended privileges (v4+???)
  5236.         bit 0: user cannot change his password
  5237.  2Dh    WORD    time left in minutes (0000h = unlimited) (v4+???)
  5238.  
  5239. Bitfields for login state:
  5240. Bit(s)    Description    (Table 0945)
  5241.  0    fully logged in
  5242.  1    remote program load login
  5243.  2    user has system manager privileges
  5244.  3    user can create audit entries
  5245.  4    bypass mail protection
  5246.  5    treat as local process
  5247.  6    bypass queue protection
  5248.  7    bypass access control lists
  5249.  
  5250. (Table 0946)
  5251. Values for last LANtastic command:
  5252.  00h    login
  5253.  01h    process termination
  5254.  02h    open file
  5255.  03h    close file
  5256.  04h    create file
  5257.  05h    create new file
  5258.  06h    create unique file
  5259.  07h    commit data to disk
  5260.  08h    read file
  5261.  09h    write file
  5262.  0Ah    delete file
  5263.  0Bh    set file attributes
  5264.  0Ch    lock byte range
  5265.  0Dh    unlock byte range
  5266.  0Eh    create subdirectory
  5267.  0Fh    remove subdirectory
  5268.  10h    rename file
  5269.  11h    find first matching file
  5270.  12h    find next matching file
  5271.  13h    get disk free space
  5272.  14h    get a queue entry
  5273.  15h    set a queue entry
  5274.  16h    control the queue
  5275.  17h    return login information
  5276.  18h    return link description
  5277.  19h    seek on file
  5278.  1Ah    get server's time
  5279.  1Bh    create audit entry
  5280.  1Ch    open file in multitude of modes
  5281.  1Dh    change password
  5282.  1Eh    disable account
  5283.  1Fh    local server file copy
  5284. ---v3+---
  5285.  20h    get username from account file
  5286.  21h    translate server's logical path
  5287.  22h    make indirect file
  5288.  23h    get indirect file contents
  5289.  24h    get physical printer status
  5290.  25h    get logical print stream info
  5291.  26h    set logical print stream info
  5292.  27h    get user's account record
  5293. ---v4+---
  5294.  28h    request server shutdown
  5295.  29h    cancel server shutdown
  5296.  2Ah    stuff server's keyboard
  5297.  2Bh    write then commit data to disk
  5298.  2Ch    set extended queue entry
  5299.  2Dh    terminate user from server
  5300.  2Eh    enable/disable logins
  5301.  2Fh    flush server caches
  5302.  30h    change username
  5303.  31h    get extended queue entry
  5304.     (same as get queue, but can return named fields blanked)
  5305. --------N-215FB1-----------------------------
  5306. INT 21 - LANtastic - GET SHARED DIRECTORY INFORMATION
  5307.     AX = 5FB1h
  5308.     DS:SI -> 64-byte buffer for link description
  5309.     ES:DI -> ASCIZ machine and shared directory name in form
  5310.          "\\machine\shared-resource"
  5311. Return: CF clear if successful
  5312.         CX = access control list privileges for requesting user (see #0947)
  5313.     CF set on error
  5314.         AX = error code
  5315.  
  5316. Bitfields for LANtastic access control list:
  5317. Bit(s)    Description    (Table 0947)
  5318.  4    (I) allow expansion of indirect files
  5319.  5    (A) allow attribute changing
  5320.  6    (P) allow physical access to device
  5321.  7    (E) allow program execution
  5322.  8    (N) allow file renaming
  5323.  9    (K) allow directory deletion
  5324.  10    (D) allow file deletion
  5325.  11    (L) allow file/directory lookups
  5326.  12    (M) allow directory creation
  5327.  13    (C) allow file creation
  5328.  14    (W) allow open for write and writing
  5329.  15    (R) allow open for read and reading
  5330. --------N-215FB2-----------------------------
  5331. INT 21 - LANtastic v3+ - GET USERNAME FROM ACCOUNT FILE
  5332.     AX = 5FB2h
  5333.     BX = username entry index (0 for first)
  5334.     DS:SI -> 16-byte buffer for username
  5335.     ES:DI -> ASCIZ server name in form "\\machine"
  5336. Return: CF clear if successful
  5337.     CF set on error
  5338.         AX = error code
  5339.     BX = next queue entry index
  5340. SeeAlso: AX=5FB0h
  5341. --------N-215FB3-----------------------------
  5342. INT 21 - LANtastic v3+ - TRANSLATE PATH
  5343.     AX = 5FB3h
  5344.     DS:SI -> 128-byte buffer for ASCIZ result
  5345.     ES:DI -> full ASCIZ path, including server name
  5346.     DX = types of translation to be performed
  5347.         bit 0: expand last component as indirect file
  5348.         bit 1: return actual path relative to server's physical disk
  5349. Return: CF clear if successful
  5350.     CF set on error
  5351.         AX = error code
  5352. Note:    always expands any indirect files along the path
  5353. SeeALso: AX=5FB4h,INT 21/AH=60h
  5354. --------N-215FB4-----------------------------
  5355. INT 21 - LANtastic v3+ - CREATE INDIRECT FILE
  5356.     AX = 5FB4h
  5357.     DS:SI -> 128-byte buffer containing ASCIZ contents of indirect file
  5358.     ES:DI -> full ASCIZ path of indirect file to create, incl machine name
  5359. Return: CF clear if successful
  5360.     CF set on error
  5361.         AX = error code
  5362. Note:    the contents of the indirect file may be any valid server-relative path
  5363. SeeAlso: AX=5FB3h,AX=5FB5h
  5364. --------N-215FB5-----------------------------
  5365. INT 21 - LANtastic v3+ - GET INDIRECT FILE CONTENTS
  5366.     AX = 5FB5h
  5367.     DS:SI -> 128-byte buffer for ASCIZ indirect file contents
  5368.     ES:DI -> full ASCIZ path of indirect file
  5369. Return: CF clear if successful
  5370.     CF set on error
  5371.         AX = error code
  5372. SeeAlso: AX=5FB4h
  5373. --------N-215FB6-----------------------------
  5374. INT 21 - LANtastic v4.1+ - SET AUTO-LOGIN DEFAULTS
  5375.     AX = 5FB6h
  5376.     ES:DI -> pointer to ASCIZ default user name, immediately followed by
  5377.         ASCIZ password
  5378.     BL = adapter number to use for default login attempt
  5379.         FFh try all valid adapters
  5380.         00h-05h try adapter 0-5 explicitly
  5381. Return: CF clear if successful
  5382.     CF set on error
  5383.         AX = error code
  5384. Notes:    call with ES:DI -> two nulls to disable auto-login
  5385. SeeAlso: AX=5FB7h
  5386. --------N-215FB7-----------------------------
  5387. INT 21 - LANtastic v4.1+ - GET AUTO-LOGIN DEFAULTS
  5388.     AX = 5FB7h
  5389.     ES:DI -> pointer to 16-byte buffer to store ASCIZ auto-login user name
  5390. Return: CF clear if successful
  5391.         DL = adapter number used for default login attempt
  5392.         FFh all valid adapters will be tried
  5393.         00h-05h specified adapter will be tried explicitly
  5394.     CF set on error
  5395.         AX = error code
  5396. SeeAlso: AX=5F81h,AX=5FB6h
  5397. --------N-215FC0-----------------------------
  5398. INT 21 - LANtastic - GET TIME FROM SERVER
  5399.     AX = 5FC0h
  5400.     DS:SI -> time block (see #0948)
  5401.     ES:DI -> ASCIZ server name to get time from
  5402. Return: CF clear if successful
  5403.     CF set on error
  5404.         AX = error code
  5405. SeeAlso: AH=E7h
  5406.  
  5407. Format of LANtastic time block:
  5408. Offset    Size    Description    (Table 0948)
  5409.  00h    WORD    year
  5410.  02h    BYTE    day
  5411.  03h    BYTE    month
  5412.  04h    BYTE    minutes
  5413.  05h    BYTE    hour
  5414.  06h    BYTE    hundredths of second
  5415.  07h    BYTE    second
  5416. --------N-215FC8-----------------------------
  5417. INT 21 - LANtastic v4.0+ - SCHEDULE SERVER SHUTDOWN
  5418.     AX = 5FC8h
  5419.     ES:DI -> ASCIZ server name in form "\\machine"
  5420.     DS:SI -> ASCIZ reason string (80 characters)
  5421.     CX = number of minutes until shutdown (0 = immediate)
  5422.     DX = option flags (see #0949)
  5423. Return: CF clear if successful
  5424.     CF set on error
  5425.         AX = error code
  5426. SeeAlso: AX=5FC9h
  5427.  
  5428. Bitfields for LANtastic option flags:
  5429. Bit(s)    Description    (Table 0949)
  5430.  0    auto reboot
  5431.  1    do not notify users
  5432.  2    halt after shutdown
  5433.  3    shutdown due to power fail (used by UPS)
  5434.  4-7    reserved
  5435.  8-14    user definable
  5436.  15    reserved
  5437. --------N-215FC9-----------------------------
  5438. INT 21 - LANtastic v4.0+ - CANCEL SERVER SHUTDOWN
  5439.     AX = 5FC9h
  5440.     ES:DI -> ASCIZ server name in form "\\machine"
  5441. Return: CF clear if successful
  5442.     CF set on error
  5443.         AX = error code
  5444. Note:    you must have the "S" privilege to use this call
  5445. SeeAlso: AX=5FC8h
  5446. --------N-215FCA-----------------------------
  5447. INT 21 - LANtastic v4.0+ - STUFF SERVER KEYBOARD BUFFER
  5448.     AX = 5FCAh
  5449.     ES:DI -> ASCIZ server name in form "\\machine"
  5450.     DS:SI -> ASCIZ string to stuff (128 bytes)
  5451. Return: CF clear if successful
  5452.     CF set on error
  5453.         AX = error code
  5454. Note:    you must have the "S" privilege to use this call
  5455.     maximum number of characters that can be stuffed is determined by the
  5456.       server's RUN BUFFER SIZE.
  5457. SeeAlso: INT 16/AH=05h
  5458. --------N-215FCB-----------------------------
  5459. INT 21 - LANtastic v4.1+ - TERMINATE USER
  5460.     AX = 5FCBh
  5461.     ES:DI -> ASCIZ server name in form "\\machine"
  5462.     DS:SI -> blank-padded username.     A null char = wildcard.
  5463.     DS:DX -> blank-padded machine name.  A null char = wildcard.
  5464.     CX = minutes until termination (0 = immediate)
  5465. Return: CF clear if successful
  5466.     CF set on error
  5467.         AX = error code
  5468. Note:    you must have the "S" privilege to use this call
  5469.     you cannot log yourself out using this call
  5470. SeeAlso: AX=5F82h
  5471. --------N-215FCC-----------------------------
  5472. INT 21 - LANtastic v4.1+ - GET/SET SERVER CONTROL BITS
  5473.     AX = 5FCCh
  5474.     ES:DI -> ASCIZ server name in form "\\machine"
  5475.     CX = bit values (value of bits you want to set) (see #0950)
  5476.     DX = bit mask (bits you are interested in, 0 = get only) (see #0950)
  5477. Return: CF clear if successful
  5478.         CX = control bits after call (see #0950)
  5479.     CF set on error
  5480.         AX = error code
  5481. Note:    you must have the "S" privilege to SET, anyone can GET.
  5482.  
  5483. Bitfields for control bits:
  5484. Bit(s)    Description    (Table 0950)
  5485.  0    disable logins
  5486. --------N-215FCD-----------------------------
  5487. INT 21 - LANtastic v4.1+ - FLUSH SERVER CACHES
  5488.     AX = 5FCDh
  5489.     ES:DI -> ASCIZ server name in form "\\machine"
  5490. Return: CF clear if successful
  5491.     CF set on error
  5492.         AX = error code
  5493. Note:    you must have the "S" privilege to use this call.
  5494. --------N-215FD0-----------------------------
  5495. INT 21 - LANtastic - GET REDIRECTED PRINTER TIMEOUT
  5496.     AX = 5FD0h
  5497. Return: CF clear if successful
  5498.         CX = redirected printer timeout in clock ticks of 55ms
  5499.         0000h if timeout disabled
  5500.     CF set on error
  5501.         AX = error code
  5502. SeeAlso: AX=5FD1h
  5503. --------N-215FD1-----------------------------
  5504. INT 21 - LANtastic - SET REDIRECTED PRINTER TIMEOUT
  5505.     AX = 5FD1h
  5506.     CX = printer timeout in clock ticks of 55ms, 0000h to disable timeouts
  5507. Return: CF clear if successful
  5508.     CF set on error
  5509.         AX = error code
  5510. SeeAlso: AX=5FD0h
  5511. --------N-215FE0-----------------------------
  5512. INT 21 C - LANtastic - GET DOS SERVICE VECTOR
  5513.     AX = 5FE0h
  5514. Return: CF clear if successful
  5515.         ES:BX -> current FAR service routine
  5516.     CF set on error
  5517.         AX = error code
  5518. Note:    the service routine is called by the LANtastic redirector whenever DOS
  5519.       may safely be called, permitting external TSRs and drivers to hook
  5520.       into LANtastic's DOS busy flag checking
  5521. SeeAlso: AX=5FE1h,INT 28,INT 2A/AH=84h
  5522. --------N-215FE1-----------------------------
  5523. INT 21 - LANtastic - SET DOS SERVICE VECTOR
  5524.     AX = 5FE1h
  5525.     ES:BX -> FAR routine to call when DOS services are available
  5526. Return: CF clear if successful
  5527.     CF set on error
  5528.         AX = error code
  5529. Note:    new handler must chain to previous handler as its first action
  5530. SeeAlso: AX=5FE0h
  5531. --------N-215FE2-----------------------------
  5532. INT 21 - LANtastic - GET MESSAGE SERVICE VECTOR
  5533.     AX = 5FE2h
  5534. Return: CF clear if successful
  5535.         ES:BX -> current FAR message service routine
  5536.     CF set on error
  5537.         AX = error code
  5538. SeeAlso: AX=5FE0h,AX=5FE3h
  5539. --------N-215FE3-----------------------------
  5540. INT 21 - LANtastic - SET MESSAGE SERVICE VECTOR
  5541.     AX = 5FE3h
  5542.     ES:BX -> FAR routine for processing network messages
  5543. Return: CF clear if successful
  5544.     CF set on error
  5545.         AX = error code
  5546. Notes:    handler must chain to previous handler as its first action
  5547.     on invocation, ES:BX -> just-received message
  5548. SeeAlso: AX=5FE2h
  5549. --------D-2160-------------------------------
  5550. INT 21 - DOS 3.0+ - "TRUENAME" - CANONICALIZE FILENAME OR PATH
  5551.     AH = 60h
  5552.     DS:SI -> ASCIZ filename or path
  5553.     ES:DI -> 128-byte buffer for canonicalized name
  5554. Return: CF set on error
  5555.         AX = error code
  5556.         02h invalid component in directory path or drive letter only
  5557.         03h malformed path or invalid drive letter
  5558.         ES:DI buffer unchanged
  5559.     CF clear if successful
  5560.         AH = 00h
  5561.         AL = destroyed (00h or 5Ch or last char of current dir on drive)
  5562.         buffer filled with qualified name of form D:\PATH\FILE.EXT or
  5563.           \\MACHINE\PATH\FILE.EXT
  5564. Desc:    determine the canonical name of the specified filename or path,
  5565.       corresponding to the undocumented TRUENAME command in COMMAND.COM
  5566. Notes:    the input path need not actually exist
  5567.     letters are uppercased, forward slashes converted to backslashes,
  5568.       asterisks converted to appropriate number of question marks, and
  5569.       file and directory names are truncated to 8.3 if necessary.  (DR-DOS
  5570.       3.41 and 5.0 do not expand asterisks)
  5571.     '.' and '..' in the path are resolved
  5572.     filespecs on local drives always start with "d:", those on network
  5573.       drives always start with "\\"
  5574.     if path string is on a JOINed drive, the returned name is the one that
  5575.       would be needed if the drive were not JOINed; similarly for a
  5576.       SUBSTed, ASSIGNed, or network drive letter.    Because of this, it is
  5577.       possible to get a qualified name that is not legal under the current
  5578.       combination of SUBSTs, ASSIGNs, JOINs, and network redirections
  5579.     under DOS 3.3 through 6.00, a device name is translated differently if
  5580.       the device name does not have an explicit directory or the directory
  5581.       is \DEV (relative directory DEV from the root directory works
  5582.       correctly).  In these cases, the returned string consists of the
  5583.       unchanged device name and extension appended to the string X:/
  5584.       (forward slash instead of backward slash as in all other cases) where
  5585.       X is the default or explicit drive letter.
  5586.     functions which take pathnames require canonical paths if invoked via
  5587.       INT 21/AX=5D00h
  5588.     supported by OS/2 v1.1 compatibility box
  5589.     NetWare 2.1x does not support characters with the high bit set; early
  5590.       versions of NetWare 386 support such characters except in this call.
  5591.       In addition, NetWare returns error code 3 for the path "X:\"; one
  5592.       should use "X:\." instead.
  5593.     for DOS 3.3-6.0, the input and output buffers may be the same, as the
  5594.       canonicalized name is built in an internal buffer and copied to the
  5595.       specified output buffer as the very last step
  5596.     for DR DOS 6.0, this function is not automatically called when on a
  5597.       network.  Device drivers reportedly cannot make this call from their
  5598.       INIT function.  Using the same pointer for both input and output
  5599.       buffers is not supported in the April 1992 and earlier versions of
  5600.       DR DOS
  5601.     Corel's CORELCDX and MSCDEX without the /S switch return canonical
  5602.       names of the form "\\D.\A.\path", where "D" is the CD-ROM drive
  5603.       letter and "A" appears to indicate the first physical CD-ROM drive;
  5604.       MSCDEX with the /S switch returns a canonical name with embedded
  5605.       blanks
  5606. SeeAlso: AX=5FB3h,INT 2F/AX=1123h,INT 2F/AX=1221h
  5607. --------D-2161-------------------------------
  5608. INT 21 - DOS 3+ - UNUSED
  5609.     AH = 61h
  5610. Return: AL = 00h
  5611. Note:    this function does nothing and returns immediately
  5612. --------O-2161--BP6467-----------------------
  5613. INT 21 U - OS/2 v1.x FAPI - OS/2 FILE SYSTEM JOIN/SUBST
  5614.     AH = 61h
  5615.     BP = 6467h ("dg")
  5616.     AL = function
  5617.         00h list
  5618.         01h add
  5619.         02h delete
  5620.     BX = drive number
  5621.     CX = size of buffer
  5622.     SI = type (0002h JOIN, 0003h SUBST)
  5623.     ES:DI -> buffer
  5624. Return: ???
  5625. Notes:    used by JOIN and SUBST to communicate with the OS/2 file system
  5626.     also supported by OS/2 v2.0+ Virtual DOS Machines
  5627. --------D-2162-------------------------------
  5628. INT 21 - DOS 3+ - GET CURRENT PSP ADDRESS
  5629.     AH = 62h
  5630. Return: BX = segment of PSP for current process
  5631. Notes:    under DOS 3+, this function does not use any of the DOS-internal stacks
  5632.       and may thus be called at any time, even during another INT 21h call
  5633.     the current PSP is not necessarily the caller's PSP
  5634.     identical to the undocumented AH=51h
  5635. SeeAlso: AH=50h,AH=51h
  5636. --------D-216300-----------------------------
  5637. INT 21 - DOS 2.25 only - GET LEAD BYTE TABLE ADDRESS
  5638.     AX = 6300h
  5639. Return: CF clear if successful
  5640.         DS:SI -> lead byte table (see #0951)
  5641.     CF set on error
  5642.         AX = error code (01h) (see #0885 at AH=59h)
  5643. Notes:    does not preserve any registers other than SS:SP
  5644.     the US version of MS-DOS 3.30 treats this as an unused function,
  5645.       setting AL=00h and returning immediately
  5646. SeeAlso: AX=6301h,AH=07h,AH=08h,AH=0Bh
  5647.  
  5648. Format of double-byte character set lead byte table entry:
  5649. Offset    Size    Description    (Table 0951)
  5650.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  5651.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  5652.     ...
  5653.   N   2 BYTEs    00h,00h end flag
  5654. --------D-216300-----------------------------
  5655. INT 21 - Far East DOS 3.2+ - GET DOUBLE BYTE CHARACTER SET LEAD-BYTE TABLE
  5656.     AX = 6300h
  5657. Return: AL = error code
  5658.         00h successful
  5659.         DS:SI -> DBCS table (see #0952)
  5660.         all other registers except CS:IP and SS:SP destroyed
  5661.         FFh not supported
  5662. Notes:    probably identical to AH=63h/AL=00h for DOS 2.25
  5663.     the US version of MS-DOS 3.30 treats this as an unused function,
  5664.       setting AL=00h and returning immediately
  5665.     the US version of DOS 4.0+ accepts this function, but returns an empty
  5666.       list
  5667. SeeAlso: AX=6300h"DOS 2.25"
  5668.  
  5669. Format of DBCS table:
  5670. Offset    Size    Description    (Table 0952)
  5671.  00h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  5672.  02h  2 BYTEs    low/high ends of a range of leading byte of double-byte chars
  5673.     ...
  5674.   N   2 BYTEs    00h,00h end flag
  5675. --------D-216301-----------------------------
  5676. INT 21 - DOS 2.25, Far East DOS 3.2+ - SET KOREAN (HANGEUL) INPUT MODE
  5677.     AX = 6301h
  5678.     DL = new mode
  5679.         00h return only full characters on DOS keyboard input functions
  5680.         01h return partially-formed (interim) characters also
  5681. Return: AL = status
  5682.         00h successful
  5683.         FFh invalid mode
  5684. Note:    Novell DOS 7 simply stores DL in the caller's PSP (see #0603 at AH=26h)
  5685. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6302h
  5686. --------D-216302-----------------------------
  5687. INT 21 - DOS 2.25, Far East DOS 3.2+ - GET KOREAN (HANGEUL) INPUT MODE
  5688.     AX = 6302h
  5689. Return: AL = status
  5690.         00h successful
  5691.         DL = current input mode
  5692.             00h return only full characters (clears interim flag)
  5693.             01h return partial characters (sets interim flag)
  5694.         FFh not supported
  5695. Note:    Novell DOS 7 simply reads the value out of the caller's PSP, so it
  5696.       can return values other than 00h or 01h if the last call to AX=6301h
  5697.       used another value
  5698. SeeAlso: AH=07h,AH=08h,AH=0Bh,AH=63h,AX=6301h
  5699. --------D-2164-------------------------------
  5700. INT 21 - DOS 3.2+ internal - SET DEVICE DRIVER LOOKAHEAD FLAG
  5701.     AH = 64h
  5702.     AL = flag
  5703.         00h (default) call device driver function 5 (non-dest read)
  5704.             before INT 21/AH=01h,08h,0Ah
  5705.         nonzero don't call driver function 5
  5706. Return: nothing (MS-DOS)
  5707.     CF set, AX=error code??? (DR-DOS 5.0, which does not support this call)
  5708. Notes:    this function is called by the DOS 3.3+ PRINT.COM
  5709.     under MS-DOS, this function does not use any of the DOS-internal stacks
  5710.       and may thus be called at any time, even during another DOS call
  5711. SeeAlso: AH=01h,AH=08h,AH=0Ah,AX=5D06h
  5712. --------O-2164--DX0000-----------------------
  5713. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - ENABLE AUTOMATIC TITLE SWITCH
  5714.     AH = 64h
  5715.     DX = 0000h (function number)
  5716.     CX = 636Ch (magic value, "cl")
  5717.     BX = 0000h (indicates special request)
  5718. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5719.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5720. SeeAlso: AH=64h/DX=0001h,INT 21/AH=4Bh
  5721. --------O-2164--DX0001-----------------------
  5722. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - SET SESSION TITLE
  5723.     AH = 64h
  5724.     DX = 0001h (function number)
  5725.     CX = 636Ch (magic value, "cl")
  5726.     BX = 0000h (indicates special request)
  5727.     ES:DI -> new ASCIZ title (max 12 char) or "" to restore default title
  5728. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5729.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5730. SeeAlso: AH=64h/DX=0000h,AH=64h/DX=0002h,INT 15/AH=12h/BH=05h
  5731. --------O-2164--DX0002-----------------------
  5732. INT 21 U - OS/2 v2.0+ Virtual DOS Machine - GET SESSION TITLE
  5733.     AH = 64h
  5734.     DX = 0002h (function number)
  5735.     CX = 636Ch (magic value, "cl")
  5736.     BX = 0000h (indicates special request)
  5737.     ES:DI -> 13-byte buffer for current title
  5738. Return: buffer filled (single 00h if title never changed)
  5739. Note:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5740.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5741. SeeAlso: AH=64h/DX=0000h,AH=64h/DX=0001h,INT 15/AH=12h/BH=05h
  5742. --------O-2164--DX0003-----------------------
  5743. INT 21 U - OS/2 v2.1 Virtual DOS Machine - GET LASTDRIVE
  5744.     AH = 64h
  5745.     DX = 0003h (function number)
  5746.     CX = 636Ch (magic value, "cl")
  5747.     BX = 0000h (indicates special request)
  5748. Return: AL = highest drive supported
  5749. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5750.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5751.     used by WinOS2
  5752.     not supported by OS/2 Warp 3.0, check list of lists instead (see #0840)
  5753. SeeAlso: AH=52h
  5754. --------O-2164--DX0004-----------------------
  5755. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SIZE OF PTDA JFT
  5756.     AH = 64h
  5757.     DX = 0004h (function number)
  5758.     CX = 636Ch (magic value, "cl")
  5759.     BX = 0000h (indicates special request)
  5760. Return: AX = number of entries in OS/2 JFT for VDM
  5761. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5762.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5763.     in an OS/2 VDM, the DOS Job File Table in the PSP contains an index
  5764.       into the OS/2 JFT in the Per-Task Data Area rather than an SFT index
  5765.       because the OS/2 SFT can contain more than 255 entries
  5766. --------O-2164--DX0005-----------------------
  5767. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET SECOND SFT FLAGS WORD
  5768.     AH = 64h
  5769.     DX = 0005h (function number)
  5770.     CX = 636Ch (magic value, "cl")
  5771.     BX = 0000h (indicates special request)
  5772.     DI = DOS file handle
  5773. Return: AX = value of second flags word from OS/2 SFT entry for file
  5774. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5775.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5776.     the OS/2 SFT has two flags words rather than DOS's one word, and this
  5777.       function provides access to the word which is not present in DOS
  5778. --------O-2164--DX0006-----------------------
  5779. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - UNLOAD DOSKRNL SYMBOLS & LOAD PROGR
  5780.     AH = 64h
  5781.     DX = 0006h (function number)
  5782.     CX = 636Ch (magic value, "cl")
  5783.     BX = 0000h (indicates special request)
  5784.     ES:DI -> ASCIZ filespec
  5785.     DS = base address for loading
  5786. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5787.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5788.     this function is only supported by the kernel debugging version of
  5789.       OS2KRNL
  5790. --------O-2164--DX0007-----------------------
  5791. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET WinOS2 CALL GATE ADDRESS
  5792.     AH = 64h
  5793.     DX = 0007h (function number)
  5794.     CX = 636Ch (magic value, "cl")
  5795.     BX = 0000h (indicates special request)
  5796. Return: AX = call gate address
  5797. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5798.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5799.     used by WinOS2 to make direct calls to OS2KRNL, bypassing the overhead
  5800.       of DOSKRNL
  5801. --------O-2164--DX0008-----------------------
  5802. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - GET LOADING MESSAGE
  5803.     AH = 64h
  5804.     DX = 0008h (function number)
  5805.     CX = 636Ch (magic value, "cl")
  5806.     BX = 0000h (indicates special request)
  5807. Return: DS:DX -> '$'-terminated message "Loading.  Please wait."
  5808. Notes:    if CX is not 636Ch on entry, INT 21/AH=6Ch is invoked, because a bug
  5809.       in OS/2 1.x FAPI erroneously called AH=64h instead of AH=6Ch
  5810.     this function permits National Language Support for the initial message
  5811.       displayed while WinOS2 starts a full-screen session
  5812. --------O-2164--CX636C-----------------------
  5813. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API support
  5814.     AH = 64h
  5815.     CX = 636Ch ("cl")
  5816.     BX = API ordinal (see #0953)
  5817.     other registers as appropriate for API call
  5818. Return: as appropriate for API call
  5819. SeeAlso: AH=64h/BX=0025h,AH=64h/BX=00B6h,AH=64h/BX=00CBh
  5820.  
  5821. (Table 0953)
  5822. Values for OS/2 API ordinal:
  5823.  0025h    DOS32StartSession
  5824.  0082h    DosGetCP
  5825.  00B6h    DosQFSAttach
  5826.  00BFh    DosEditName
  5827.  00CBh    DosForceDelete
  5828.  0144h    Dos32CreateEventSem
  5829.  0145h    Dos32OpenEvenSem
  5830.  0146h    Dos32CloseEventSem
  5831.  0147h    Dos32ResetEventSem
  5832.  0148h    Dos32PostEventSem
  5833.  0149h    Dos32WaitEventSem
  5834.  014Ah    Dos32QueryEventSem
  5835.  014Bh    Dos32CreateMutexSem
  5836.  014Ch    Dos32OpenMutexSem
  5837.  014Dh    Dos32CloseMutexSem
  5838.  014Eh    Dos32RequestMutexSem
  5839.  014Fh    Dos32ReleaseMutexSem
  5840.  0150h    Dos32QueryMutexSem
  5841.  0151h    Dos32CreateMuxWaitSem
  5842.  0152h    Dos32OpenMuxWaitSem
  5843.  0153h    Dos32CloseMuxWaitSem
  5844.  0154h    Dos32WaitMuxWaitSem
  5845.  0155h    Dos32AddMuxWaitSem
  5846.  0156h    Dos32DeleteMuxWaitSem
  5847.  0157h    Dos32QueryMuxWaitSem
  5848. --------O-2164--BX0025-----------------------
  5849. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DOS32StartSession
  5850.     AH = 64h
  5851.     BX = 0025h (API ordinal)
  5852.     CX = 636Ch ("cl")
  5853.     DS:SI -> STARTDATA structure (see #0954)
  5854. Return: AX = return code
  5855. SeeAlso: AH=64h/CX=636Ch,AH=64h/BX=00B6h
  5856.  
  5857. Format of OS/2 Virtual DOS Machine STARTDATA structure:
  5858. Offset    Size    Description    (Table 0954)
  5859.  00h    WORD    length of structure (must be 0018h,001Eh,0020h,0032h,or 003Ch)
  5860.  02h    WORD    relation of new process to caller (00h independent, 01h child)
  5861.  04h    WORD    fore/background (00h foreground, 01h background)
  5862.  06h    WORD    trace options (00h-02h, 00h = no trace)
  5863.  08h    DWORD    pointer to ASCIZ program title (max 62 chars) or 0000h:0000h
  5864.  0Ch    DWORD    pointer to ASCIZ program name (max 128 chars) or 0000h:0000h
  5865.  10h    DWORD    pointer to ASCIZ program args (max 144 chars) or 0000h:0000h
  5866.  14h    DWORD    "TermQ" (currently reserved, must be 00000000h)
  5867.  18h    DWORD    pointer to environment (max 486 bytes) or 0000h:0000h
  5868.  1Ch    WORD    inheritance (00h or 01h)
  5869.  1Eh    WORD    session type
  5870.         00h OS/2 session manager determines type (default)
  5871.         01h OS/2 full-screen
  5872.         02h OS/2 window
  5873.         03h PM
  5874.         04h VDM full-screen
  5875.         07h VDM window
  5876.  20h    DWORD    pointer to ASCIZ icon filename (max 128 chars) or 0000h:0000h
  5877.  24h    DWORD    "PgmHandle" (currently reserved, must be 00000000h)
  5878.  28h    WORD    "PgmControl"
  5879.  2Ah    WORD    initial column
  5880.  2Ch    WORD    initial row
  5881.  2Eh    WORD    initial width
  5882.  30h    WORD    initial height
  5883.  32h    WORD    reserved (0)
  5884.  34h    DWORD    "ObjectBuffer" (currently reserved, must be 00000000h)
  5885.  38h    DWORD    "ObjectBufferLen" (currently reserved, must be 00000000h)
  5886. --------O-2164--BX00B6-----------------------
  5887. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DosQFSAttach
  5888.     AH = 64h
  5889.     BX = 00B6h (API ordinal)
  5890.     CX = 636Ch (magic value "cl")
  5891.     DS = user's data segment
  5892.     ES:DI -> FSQAttachStruc (see #0955)
  5893. Return: CF set on error
  5894.         AX = error code (see #0885 at AH=59h)
  5895.     CF clear if successful
  5896.         AX = 0000h
  5897.         data buffer filled
  5898. SeeAlso: AH=64h/CX=636Ch
  5899.  
  5900. Format of OS/2 Virtual DOS Machine FSQAttachStruc:
  5901. Offset    Size    Description    (Table 0955)
  5902.  00h    DWORD    reserved
  5903.  04h    DWORD    pointer to the offset of the data buffer length
  5904.  08h    DWORD    pointer to the offset of the data buffer
  5905.  0Ch    WORD    FSA Info level
  5906.  0Eh    WORD    ordinal index into table
  5907.  10h    DWORD    pointer to the offset of the device name
  5908. Notes:    The segment value of the buffer, buffer length, and device
  5909.       name MUST all be the same.  It is defined on entry in the DS
  5910.       register.  The details of each info level are defined in the
  5911.       OS/2 CP Reference.
  5912. --------O-2164--BX00CB-----------------------
  5913. INT 21 U - OS/2 v2.1+ Virtual DOS Machine - OS/2 API DosForceDelete
  5914.     AH = 64h
  5915.     BX = 00CBh (API ordinal)
  5916.     CX = 636Ch (magic value "cl")
  5917.     DS:DX -> ASCIZ filename
  5918. Return: CF clear if successful
  5919.         AX destroyed
  5920.     CF set on error
  5921.         AX = error code (02h,03h,05h) (see #0885 at AH=59h)
  5922. Desc:    delete a file without saving it to the undelete directory
  5923. SeeAlso: AH=41h,AH=64h/CX=636Ch
  5924. --------D-2165-------------------------------
  5925. INT 21 - DOS 3.3+ - GET EXTENDED COUNTRY INFORMATION
  5926.     AH = 65h
  5927.     AL = info ID
  5928.         01h get general internationalization info
  5929.         02h get pointer to uppercase table
  5930.         04h get pointer to filename uppercase table
  5931.         05h get pointer to filename terminator table
  5932.         06h get pointer to collating sequence table
  5933.         07h (DOS 4+) get pointer to Double-Byte Character Set table
  5934.     BX = code page (FFFFh=global code page)
  5935.     DX = country ID (FFFFh=current country)
  5936.     ES:DI -> country information buffer (see #0956)
  5937.     CX = size of buffer (>= 5)
  5938. Return: CF set on error
  5939.         AX = error code (see #0885 at AH=59h)
  5940.     CF clear if successful
  5941.         CX = size of country information returned
  5942.         ES:DI -> country information
  5943. Notes:    AL=05h appears to return same info for all countries and codepages; it
  5944.       has been documented for DOS 5+, but was undocumented in ealier
  5945.       versions
  5946.     NLSFUNC must be installed to get info for countries other than the
  5947.       default
  5948.     subfunctions 02h and 04h are identical under OS/2
  5949. SeeAlso: AH=38h,INT 2F/AX=1401h,INT 2F/AX=1402h,INT 2F/AX=14FEh
  5950.  
  5951. Format of country information:
  5952. Offset    Size    Description    (Table 0956)
  5953.  00h    BYTE    info ID
  5954. ---if info ID = 01h---
  5955.  01h    WORD    size
  5956.  03h    WORD    country ID
  5957.  05h    WORD    code page
  5958.  07h 34 BYTEs    country-dependent info (see AH=38h)
  5959. ---if info ID = 02h---
  5960.  01h    DWORD    pointer to uppercase table (see #0957)
  5961. ---if info ID = 04h---
  5962.  01h    DWORD    pointer to filename uppercase table (see #0958)
  5963. ---if info ID = 05h---
  5964.  01h    DWORD    pointer to filename character table (see #0959)
  5965. ---if info ID = 06h---
  5966.  01h    DWORD    pointer to collating table (see #0960)
  5967. ---if info ID = 07h (DOS 4+)---
  5968.  01h    DWORD    pointer to DBCS lead byte table (see #0961)
  5969.  
  5970. Format of uppercase table:
  5971. Offset    Size    Description    (Table 0957)
  5972.  00h    WORD    table size
  5973.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  5974.  
  5975. Format of filename uppercase table:
  5976. Offset    Size    Description    (Table 0958)
  5977.  00h    WORD    table size
  5978.  02h 128 BYTEs    uppercase equivalents (if any) of chars 80h to FFh
  5979.  
  5980. Format of filename terminator table:
  5981. Offset    Size    Description    (Table 0959)
  5982.  00h    WORD    table size (not counting this word)
  5983.  02h    BYTE    ??? (01h for MS-DOS 3.30-6.00)
  5984.  03h    BYTE    lowest permissible character value for filename
  5985.  04h    BYTE    highest permissible character value for filename
  5986.  05h    BYTE    ??? (00h for MS-DOS 3.30-6.00)
  5987.  06h    BYTE    first excluded character in range \ all characters in this
  5988.  07h    BYTE    last excluded character in range  / range are illegal
  5989.  08h    BYTE    ??? (02h for MS-DOS 3.30-6.00)
  5990.  09h    BYTE    number of illegal (terminator) characters
  5991.  0Ah  N BYTEs    characters which terminate a filename:    ."/\[]:|<>+=;,
  5992. Note:    partially documented for DOS 5+, but undocumented for earlier versions
  5993.  
  5994. Format of collating table:
  5995. Offset    Size    Description    (Table 0960)
  5996.  00h    WORD    table size
  5997.  02h 256 BYTEs    values used to sort characters 00h to FFh
  5998.  
  5999. Format of DBCS lead byte table:
  6000. Offset    Size    Description    (Table 0961)
  6001.  00h    WORD    length
  6002.  02h 2N BYTEs    start/end for N lead byte ranges
  6003.     WORD    0000h    (end of table)
  6004. --------D-2165-------------------------------
  6005. INT 21 - DOS 4+ - COUNTRY-DEPENDENT CHARACTER CAPITALIZATION
  6006.     AH = 65h
  6007.     AL = function
  6008.         20h capitalize character
  6009.         DL = character to capitalize
  6010.         Return: DL = capitalized character
  6011.         21h capitalize string
  6012.         DS:DX -> string to capitalize
  6013.         CX = length of string
  6014.         22h capitalize ASCIZ string
  6015.         DS:DX -> ASCIZ string to capitalize
  6016. Return: CF set on error
  6017.         AX = error code (see #0885 at AH=59h)
  6018.     CF clear if successful
  6019. Note:    these calls have been documented for DOS 5+, but were undocumented in
  6020.       DOS 4.x.
  6021. --------D-216523-----------------------------
  6022. INT 21 U - DOS 4+ internal - DETERMINE IF CHARACTER REPRESENTS YES/NO RESPONSE
  6023.     AX = 6523h
  6024.     DL = character
  6025.     DH = second character of double-byte character (if applicable)
  6026. Return: CF set on error
  6027.     CF clear if successful
  6028.         AX = type
  6029.         00h no
  6030.         01h yes
  6031.         02h neither yes nor no
  6032. --------D-2165-------------------------------
  6033. INT 21 U - DOS 4+ internal - COUNTRY-DEPENDENT FILENAME CAPITALIZATION
  6034.     AH = 65h
  6035.     AL = function
  6036.         A0h capitalize filename character
  6037.         DL = character to capitalize
  6038.         Return: DL = capitalized character
  6039.         A1h capitalize counted filename string
  6040.         DS:DX -> filename string to capitalize
  6041.         CX = length of string
  6042.         A2h capitalize ASCIZ filename
  6043.         DS:DX -> ASCIZ filename to capitalize
  6044. Return: CF set on error
  6045.         AX = error code (see #0885 at AH=59h)
  6046.     CF clear if successful
  6047. Note:    nonfunctional in DOS 4.00 through 6.00 due to a bug (the code sets a
  6048.       pointer depending on the high bit of AL, but doesn't clear the
  6049.       bit before branching by function number).
  6050. --------D-216601-----------------------------
  6051. INT 21 - DOS 3.3+ - GET GLOBAL CODE PAGE TABLE
  6052.     AX = 6601h
  6053. Return: CF set on error
  6054.         AX = error code (see #0885 at AH=59h)
  6055.     CF clear if successful
  6056.         BX = active code page (see #0962)
  6057.         DX = system code page (see #0962)
  6058. SeeAlso: AX=6602h
  6059. --------D-216602-----------------------------
  6060. INT 21 - DOS 3.3+ - SET GLOBAL CODE PAGE TABLE
  6061.     AX = 6602h
  6062.     BX = active code page (see #0962)
  6063.     DX = system code page (active page at boot time)
  6064. Return: CF set on error
  6065.         AX = error code (see #0885 at AH=59h)
  6066.     CF clear if successful
  6067.         AX = EB41h (Novell NWDOS v7.0 when NLSFUNC not installed and
  6068.           request was for previously-active code page)
  6069. SeeAlso: AX=6601h,INT 2F/AX=14FFh
  6070.  
  6071. (Table 0962)
  6072. Values for code page:
  6073.  437    US
  6074.  850    Multilingual
  6075.  852    Slavic/Latin II (DOS 5+)
  6076.  857    Turkish
  6077.  860    Portugal
  6078.  861    Iceland
  6079.  863    Canada (French)
  6080.  865    Norway/Denmark
  6081. --------D-2167-------------------------------
  6082. INT 21 - DOS 3.3+ - SET HANDLE COUNT
  6083.     AH = 67h
  6084.     BX = size of new file handle table for process
  6085. Return: CF clear if successful
  6086.     CF set on error
  6087.         AX = error code (see #0885 at AH=59h)
  6088. Desc:    adjust the size of the per-process open file table, thus raising or
  6089.       lowering the limit on the number of files the caller can open
  6090.       simultaneously
  6091. Notes:    if BX <= 20, no action is taken if the handle limit has not yet been
  6092.       increased, and the table is copied back into the PSP if the limit
  6093.       is currently > 20 handles
  6094.     for file handle tables of > 20 handles, DOS 3.30 never reuses the
  6095.       same memory block, even if the limit is being reduced; this can lead
  6096.       to memory fragmentation as a new block is allocated and the existing
  6097.       one freed
  6098.     only the first 20 handles are copied to child processes in DOS 3.3-6.0
  6099.     increasing the file handles here will not, in general, increase the
  6100.       number of files that can be opened using the runtime library of a
  6101.       high-level language such as C
  6102.     Novell DOS 7 reportedly terminates the calling program if the JFT is
  6103.       being reduced in size and there are any open file handles beyond
  6104.       the portion of the JFT being retained
  6105. BUGS:    the original release of DOS 3.30 allocates a full 64K for the handle
  6106.       table on requests for an even number of handles
  6107.     DR-DOS 3.41 and 5.0 will lose track of any open file handles beyond
  6108.       the portion of the JFT retained after the call; MS-DOS will indicate
  6109.       error 04h if any of the JFT entries to be removed are open
  6110. SeeAlso: AH=26h,AH=86h
  6111. --------D-2168-------------------------------
  6112. INT 21 - DOS 3.3+ - "FFLUSH" - COMMIT FILE
  6113.     AH = 68h
  6114.     BX = file handle
  6115. Return: CF clear if successful
  6116.         all data still in DOS disk buffers is written to disk immediately,
  6117.           and the file's directory entry is updated
  6118.     CF set on error
  6119.         AX = error code (see #0885 at AH=59h)
  6120. SeeAlso: AX=5D01h,AH=6Ah,INT 2F/AX=1107h
  6121. --------D-2169-------------------------------
  6122. INT 21 U - DOS 4+ internal - GET/SET DISK SERIAL NUMBER
  6123.     AH = 69h
  6124.     AL = subfunction
  6125.         00h get serial number
  6126.         01h set serial number
  6127.     BL = drive (0=default, 1=A, 2=B, etc)
  6128.     BH = info level (00h only for DOS; OS/2 allows other levels)
  6129.     DS:DX -> disk info (see #0963)
  6130. Return: CF set on error
  6131.         AX = error code (see #0885 at AH=59h)
  6132.     CF clear if successful
  6133.         AX destroyed
  6134.         (AL = 00h) buffer filled with appropriate values from extended BPB
  6135.         (AL = 01h) extended BPB on disk set to values from buffer
  6136. Notes:    does not generate a critical error; all errors are returned in AX
  6137.     error 0005h given if no extended BPB on disk
  6138.     does not work on network drives (error 0001h)
  6139.     buffer after first two bytes is exact copy of bytes 27h thru 3Dh of
  6140.       extended BPB on disk
  6141.     this function is supported under Novell NetWare versions 2.0A through
  6142.       3.11; the returned serial number is the one a DIR would display,
  6143.       the volume label is the NetWare volume label, and the file system
  6144.       is set to "FAT16".
  6145.     the serial number is computed from the current date and time when the
  6146.       disk is created; the first part is the sum of the seconds/hundredths
  6147.       and month/day, the second part is the sum of the hours/minutes and
  6148.       year
  6149.     the volume label which is read or set is the one stored in the extended
  6150.       BPB on disks formatted with DOS 4.0+, rather than the special root
  6151.       directory entry used by the DIR command in COMMAND.COM (use AH=11h
  6152.       to find that volume label)
  6153. SeeAlso: AX=440Dh
  6154.  
  6155. Format of disk info:
  6156. Offset    Size    Description    (Table 0963)
  6157.  00h    WORD    info level (zero)
  6158.  02h    DWORD    disk serial number (binary)
  6159.  06h 11 BYTEs    volume label or "NO NAME    " if none present
  6160.  11h  8 BYTEs    (AL=00h only) filesystem type--string "FAT12   " or "FAT16   "
  6161. --------O-2169-------------------------------
  6162. INT 21 - DR-DOS 5.0 - NULL FUNCTION
  6163.     AH = 69h
  6164. Return: AL = 00h
  6165. SeeAlso: AH=18h
  6166. --------v-216969-----------------------------
  6167. INT 21 - VIRUS - "Rape-747" - INSTALLATION CHECK
  6168.     AX = 6969h
  6169. Return: AX = 0666h if resident
  6170. SeeAlso: AX=58CCh,AH=76h"VIRUS"
  6171. --------d-2169FFDX0000-----------------------
  6172. INT 21 U - CUBIT v4.00 - GET CUBIT INT 21 HANDLER
  6173.     AX = 69FFh
  6174.     DX = 0000h
  6175.     BX = CB00h (magic value)
  6176. Return: ES:BX -> CUBITR.EXE handler for INT 21
  6177. Note:    the installation check consists of testing that the first eight bytes
  6178.       at the returned interrupt handler are EBh 07h "CUBITR" (a short
  6179.       jump around the signature followed by the signature); the byte
  6180.       following the signature (i.e. ES:[BX+8]) indicates whether CUBITR
  6181.       is active (01h) or disabled (00h)
  6182. SeeAlso: AX=69FFh/DX=CFBFh
  6183. Index:    installation check;CUBIT
  6184. --------d-2169FFDXCFBF-----------------------
  6185. INT 21 U - CUBIT v4.00 - UNINSTALL
  6186.     AX = 69FFh
  6187.     DX = CFBFh
  6188.     CX = EFCFh
  6189.     BX = CB00h (magic value)
  6190. Return: ES:BX -> CUBITR.EXE handler for INT 21
  6191.     CX = status
  6192.         2020h successful
  6193.         2222h failed
  6194. Note:    if DX is neither 0000h nor CFBFh on entry, some other code is executed
  6195. SeeAlso: AX=69FFh/DX=0000h
  6196. --------D-216A-------------------------------
  6197. INT 21 U - DOS 4+ - COMMIT FILE
  6198.     AH = 6Ah
  6199.     BX = file handle
  6200. Return: CF clear if successful
  6201.         AH = 68h
  6202.     CF set on error
  6203.         AX = error code (06h) (see #0885 at AH=59h)
  6204. Note:    identical to AH=68h in DOS 5.0-6.0; not known whether this is the case
  6205.       in DOS 4.x
  6206. SeeAlso: AH=68h
  6207. --------D-216B-------------------------------
  6208. INT 21 U - DOS 4.0 internal - IFS IOCTL
  6209.     AH = 6Bh
  6210.     AL = subfunction
  6211.         00h ???
  6212.         DS:SI -> Current Directory Structure???
  6213.         CL = drive (1=A:)
  6214.         01h ???
  6215.         DS:SI -> ???
  6216.         CL = file handle???
  6217.         02h ???
  6218.         DS:SI -> Current Directory Structure???
  6219.         DI = ???
  6220.         CX = drive (1=A:)
  6221. Return: CF set on error
  6222.         AX = error code (see #0885 at INT 21/AH=59h)
  6223.     CF clear if successful
  6224. Note:    passed through to INT 2F/AX=112Fh with AX on top of stack
  6225. SeeAlso: AH=6Bh"DOS 5",INT 2F/AX=112Fh
  6226. --------D-216B-------------------------------
  6227. INT 21 U - DOS 5+ - NULL FUNCTION
  6228.     AH = 6Bh
  6229. Return: AL = 00h
  6230. Note:    this function does nothing and returns immediately
  6231. SeeAlso: AH=6Bh"DOS 4"
  6232. --------D-216C00-----------------------------
  6233. INT 21 - DOS 4+ - EXTENDED OPEN/CREATE
  6234.     AX = 6C00h
  6235.     BL = open mode as in AL for normal open (see also AH=3Dh)
  6236.         bit 7: inheritance
  6237.         bits 4-6: sharing mode
  6238.         bit 3 reserved
  6239.         bits 0-2: access mode
  6240.     BH = flags
  6241.         bit 6 = auto commit on every write (see also AH=68h)
  6242.         bit 5 = return error rather than doing INT 24h
  6243.     CX = create attribute (see #0965)
  6244.     DL = action if file exists/does not exist (see #0966)
  6245.     DH = 00h (reserved)
  6246.     DS:SI -> ASCIZ file name
  6247. Return: CF set on error
  6248.        AX = error code (see #0885 at AH=59h)
  6249.     CF clear if successful
  6250.        AX = file handle
  6251.        CX = status (see #0964)
  6252. Notes:    the PC LAN Program only supports DL=01h, DL=10h/sharing=compatibility,
  6253.       and DL=12h
  6254.     DR-DOS reportedly does not support this function and does not return
  6255.       an "invalid function call" error when this function is used.
  6256.     the documented bits of BX are stored in the SFT when the file is opened
  6257.       (see #0853,#0854)
  6258. BUG:    this function has bugs (at least in DOS 5.0 and 6.2) when used with
  6259.       drives handled via the network redirector (INT 2F/AX=112Eh):
  6260.         - CX (attribute) is not passed to the redirector if DL=11h,
  6261.         - CX does not return the status, it is returned unchanged because
  6262.           DOS does a PUSH CX/POP CX when calling the redirector.
  6263. SeeAlso: AH=3Ch,AH=3Dh,AX=6C01h,AH=71h,INT 2F/AX=112Eh
  6264.  
  6265. (Table 0964)
  6266. Values for extended open function status:
  6267.  01h    file opened
  6268.  02h    file created
  6269.  03h    file replaced
  6270.  
  6271. Bitfields for file create attribute:
  6272. Bit(s)    Description    (Table 0965)
  6273.  6-15    reserved
  6274.  5    archive
  6275.  4    reserved
  6276.  3    volume label
  6277.  2    system
  6278.  1    hidden
  6279.  0    readonly
  6280.  
  6281. Bitfields for action:
  6282. Bit(s)    Description    (Table 0966)
  6283.  7-4    action if file does not exist
  6284.     0000 fail
  6285.     0001 create
  6286.  3-0    action if file exists
  6287.     0000 fail
  6288.     0001 open
  6289.     0010 replace/open
  6290. --------O-216C01-----------------------------
  6291. INT 21 U - OS/2 v2.0 - "DosOpen2"
  6292.     AX = 6C01h
  6293.     BL = open mode as in AL for normal open (see also AH=3Dh)
  6294.         bit 7: inheritance
  6295.         bits 4-6: sharing mode
  6296.         bit 3 reserved
  6297.         bits 0-2: access mode
  6298.     BH = flags
  6299.         bit 6 = auto commit on every write (see also AH=68h)
  6300.         bit 5 = return error rather than doing INT 24h
  6301.     CX = create attribute (see #0965)
  6302.     DL = action if file exists/does not exist (see #0966)
  6303.     DH = 00h (reserved)
  6304.     DS:SI -> ASCIZ file name
  6305.     ES:DI -> EAOP structure
  6306. Return: CF set on error
  6307.        AX = error code (see #0885 at AH=59h)
  6308.     CF clear if successful
  6309.        AX = file handle
  6310.        CX = status (see #0964)
  6311. Note:    this function is virtually identical to AX=6C00h, but supports OS/2's
  6312.       extended attributes
  6313. SeeAlso: AX=5704h,AX=6C00h,AH=6Fh"OS/2"
  6314. --------D-216D-------------------------------
  6315. INT 21 U - DOS 5+ ROM - FIND FIRST ROM PROGRAM
  6316.     AH = 6Dh
  6317.     DS:DX -> ASCIZ program name (may contain wildcrds)
  6318. Return: CF clear if found
  6319.         [DTA] = ROM search structure (see #0967)
  6320.     CF set if not found
  6321.         AX = error code
  6322.         0002h name not found in ROM
  6323.         0003h name contains colon or backslash
  6324. Notes:    the '*' wildcard matches all remaining characters in a ROM program's
  6325.       name; any following characters in the search mask are ignored up to
  6326.       another asterisk, which must be matched by an asterisk in the
  6327.       found program's name.
  6328.     the search mask and program names may contain multiple periods
  6329. SeeAlso: AH=1Ah,AH=4Eh,AH=6Eh,AX=6F00h,AX=6F02h
  6330.  
  6331. Format of ROM search structure:
  6332. Offset    Size    Description    (Table 0967)
  6333.  00h 13 BYTEs    ASCIZ name of found ROM program
  6334.  0Dh    DWORD    address at which to resume search (do not modify)
  6335.  11h    var    ASCIZ search mask passed in (do not modify)
  6336. --------O-216D-------------------------------
  6337. INT 21 U - OS/2 v1.x FAPI - "DosMkDir2"
  6338.     AH = 6Dh
  6339.     ???
  6340. Return: ???
  6341. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  6342. SeeAlso: AH=39h
  6343. --------O-216D-------------------------------
  6344. INT 21 U - Novell DOS 7 - NOP
  6345.     AH = 6Dh
  6346. Return: AX = 0000h
  6347. Note:    this function invokes the same code as other NOP functions such as
  6348.       AH=18h and AH=61h
  6349. --------D-216E-------------------------------
  6350. INT 21 U - DOS 5+ ROM - FIND NEXT ROM PROGRAM
  6351.     AH = 6Eh
  6352.     [DTA] = result of previous FindFirst ROM (see AH=6Dh)
  6353. Return: CF clear if found
  6354.         [DTA] = updated ROM search structure (see #0967)
  6355.     CF set if not found
  6356.         AX = 0012h (no more matches)
  6357. SeeAlso: AH=4Fh,AH=6Dh
  6358. --------O-216E-------------------------------
  6359. INT 21 U - OS/2 v1.x FAPI - "DosENumAttrib"
  6360.     AH = 6Eh
  6361.     ???
  6362. Return: ???
  6363. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  6364. SeeAlso: AX=5703h,AH=6Fh"OS/2",INT 2F/AX=112Dh
  6365. --------O-216F-------------------------------
  6366. INT 21 U - OS/2 v1.x FAPI - "DosQMaxEASize" - GET MAXIMUM SIZE OF EXTENDED ATTR
  6367.     AH = 6Fh
  6368.     ???
  6369. Return: ???
  6370. Note:    also supported by OS/2 v2.0+ Virtual DOS Machines
  6371. SeeAlso: AX=5703h,AX=6C01h,AH=6Eh"OS/2"
  6372. --------D-216F00-----------------------------
  6373. INT 21 U - DOS 5+ ROM - GET ROM SCAN START ADDRESS
  6374.     AX = 6F00h
  6375. Return: CF clear
  6376.     AL = 00h
  6377.     BX = current ROM scan starting segment
  6378. SeeAlso: AH=6Dh,AX=6F01h,AX=6F02h
  6379. --------D-216F01-----------------------------
  6380. INT 21 U - DOS 5+ ROM - SET ROM SCAN START ADDRESS
  6381.     AX = 6F01h
  6382.     BX = new ROM scan starting address
  6383. Return: CF clear
  6384.     AL = 00h
  6385. SeeAlso: AX=6F00h,AX=6F03h
  6386. --------D-216F02-----------------------------
  6387. INT 21 U - DOS 5+ ROM - GET EXCLUSION REGION LIST
  6388.     AX = 6F02h
  6389.     ES:BX -> buffer for exclusion region list (see #0968)
  6390. Return: CF clear
  6391.     AL = 00h
  6392.     ES:BX = 0000h:0000h on error, unchanged if buffer filled
  6393. SeeAlso: AX=6F00h,AX=6F03h
  6394.  
  6395. Format of ROM exclusion region list:
  6396. Offset    Size    Description    (Table 0968)
  6397.  00h    WORD    number of entries
  6398.  02h 2N WORDs    start/end segments of N excluded regions
  6399. --------D-216F03-----------------------------
  6400. INT 21 U - DOS 5+ ROM - SET EXCLUSION REGION LIST
  6401.     AX = 6F03h
  6402.     DS:DX -> new exclusion region list (see #0968)
  6403. Return: CF clear
  6404.     AL = 00h
  6405. Notes:    DOS saves only the pointer and assumes that the contents of the list
  6406.       are never changed, and that regions do not overlap
  6407.     if AL > 03h on entry, DOS returns CF set/AL=01h
  6408. SeeAlso: AX=6F01h,AX=6F02h
  6409. ----------217070BX6060-----------------------
  6410. INT 21 - PCW Weather Card interface - GET DATA SEGMENT
  6411.     AX = 7070h
  6412.     BX = 6060h
  6413.     CX = 7070h
  6414.     DX = 7070h
  6415.     SI = 7070h
  6416.     DI = 7070h
  6417. Return: AX = segment of data structure (see #0969)
  6418. Notes:    the data structure is at offset 516 from this segment
  6419.     the update byte is at offset 514 from this segment.  Updates are
  6420.       once per second while this byte is nonzero and it is decremented
  6421.       once per second.  While this byte is 0 updates are once per minute.
  6422. SeeAlso: AX=7070h/BX=7070h
  6423.  
  6424. Format of PCW Weather Card data structure:
  6425. Offset    Type    Description    (Table 0969)
  6426.  00h    WORD    hour
  6427.  02h    WORD    minute
  6428.  04h    WORD    second
  6429.  06h    WORD    day
  6430.  08h    WORD    month
  6431.  0Ah    WORD    year
  6432.  0Ch    WORD    ???
  6433.  0Eh    WORD    relative barometric pressure (in 1/100 inches)
  6434.  10h    WORD    ???
  6435.  12h    WORD    ???
  6436.  14h    WORD    temperature 1 (in 1/10 degrees F)
  6437.  16h    WORD    temperature 1 lowest (in 1/10 degrees F)
  6438.  18h    WORD    temperature 1 highest (in 1/10 degrees F)
  6439.  1Ah    WORD    temperature 2 (in 1/10 degrees F)
  6440.  1Ch    WORD    temperature 2 lowest (in 1/10 degrees F)
  6441.  1Eh    WORD    temperature 2 highest (in 1/10 degrees F)
  6442.  20h    WORD    wind speed (in MPH)
  6443.  22h    WORD    average of 60 wind speed samples (in MPH)
  6444.  24h    WORD    highest wind speed (in MPH)
  6445.  26h    WORD    wind chill factor  (in 1/10 degrees F)
  6446.  28h    WORD    lowest wind chill factor (in 1/10 degrees F)
  6447.  2Ah    WORD    ???
  6448.  2Ch    WORD    wind direction (in degrees)
  6449.  2Eh    WORD    accumulated daily rainfall (in 1/10 inches)
  6450.  30h    WORD    accumulated annual rainfall (in 1/10 inches)
  6451. ----------217070BX7070-----------------------
  6452. INT 21 - PCW Weather Card interface - INSTALLATION CHECK
  6453.     AX = 7070h
  6454.     BX = 7070h
  6455.     CX = 7070h
  6456.     DX = 7070h
  6457.     SI = 7070h
  6458.     DI = 7070h
  6459. Return: AX = 0070h
  6460.     BX = 0070h
  6461.     CX = 0070h
  6462.     DX = 0070h
  6463.     SI = 0070h
  6464.     DI = 0070h
  6465. SeeAlso: AX=7070h/BX=6060h,AX=8080h
  6466. --------D-2171-------------------------------
  6467. INT 21 - DOS 7 (Chicago) - LONG FILENAME FUNCTIONS
  6468.     AH = 71h
  6469.     AL = function
  6470.         39h create directory
  6471.         3Ah remove directory
  6472.         3Bh set current directory
  6473.         41h delete file
  6474.         43h get file attributes (BL=00h), set file attributes (BL=01h)
  6475.         47h get current directory
  6476.         4Eh find first file
  6477.         4Fh find next file
  6478.         56h move (rename) file
  6479.         6Ch create/open file
  6480. Return: CF set on error
  6481.         AX = error code
  6482.         7100h if function not supported
  6483.     CF clear if successful
  6484.         other registers as for corresponding "old" DOS function
  6485. Notes:    if error 7100h is returned, the old-style function should be called
  6486.     AX=714Eh returns a "search handle" which must be passed to AX=714Fh;
  6487.       when the search is complete, AH=72h must be called to terminate
  6488.       the search
  6489. SeeAlso: AH=39h,AH=3Ah,AH=3Bh,AH=41h,AH=43h,AH=47h,AH=4Eh,AH=4Fh,AH=56h,AH=6Ch
  6490. SeeAlso: AH=72h
  6491. --------D-2172-------------------------------
  6492. INT 21 - DOS 7 (Chicago) - "FindClose" - TERMINATE DIRECTORY SEARCH
  6493.     AH = 72h
  6494.     details not yet available
  6495. Note:    this function must be called after starting a search with AX=714Eh,
  6496.       to indicate that the search handle returned by that function will
  6497.       no longer be used
  6498. SeeAlso: AH=4Eh,AH=71h
  6499. --------v-2176-------------------------------
  6500. INT 21 - VIRUS - "Klaeren"/"Hate" - INSTALLATION CHECK
  6501.     AH = 76h
  6502. Return: AL = 48h if resident
  6503. SeeAlso: AX=6969h,AX=7700h"VIRUS"
  6504. --------v-217700-----------------------------
  6505. INT 21 - VIRUS - "Growing Block" - INSTALLATION CHECK
  6506.     AX = 7700h
  6507. Return: AX = 0920h if resident
  6508. SeeAlso: AH=76h,AX=7BCEh,AH=7Fh
  6509. --------V-217734-----------------------------
  6510. INT 21 U - SCROLLit v1.7 - INSTALLATION CHECK
  6511.     AX = 7734h
  6512. Return: DX = 3477h if installed
  6513.         AX = segment of resident code
  6514. Program: ScrollIt is a shareware backscroll utility by Bromfield Software
  6515.       Products
  6516. --------U-217761-----------------------------
  6517. INT 21 - WATCH.COM v3.2+ - INSTALLATION CHECK
  6518.     AX = 7761h ('wa')
  6519. Return: AX = 6177h
  6520. Note:    WATCH.COM is part of the "TSR" package by TurboPower Software
  6521. SeeAlso: INT 16/AX=7761h
  6522. ----------217BCE-----------------------------
  6523. INT 21 - VIRUS - "Whisper"/"Taipan" - INSTALLATION CHECK???
  6524.     AX = 7BCEh
  6525. Return: ???
  6526. SeeAlso: AX=7700h,AH=7Fh"VIRUS"
  6527. --------v-217F-------------------------------
  6528. INT 21 - VIRUS - "Squeaker" - INSTALLATION CHECK
  6529.     AH = 7Fh
  6530. Return: AH = 80h if resident
  6531. SeeAlso: AX=7BCEh,AH=83h"VIRUS"
  6532. --------D-2180-------------------------------
  6533. INT 21 - European MS-DOS 4.0 - "AEXEC" - EXECUTE PROGRAM IN BACKGROUND
  6534.     AH = 80h
  6535.     CX = mode
  6536.         0000h place child in zombie mode on exit to preserve exit code
  6537.         0001h discard child process and exit code on termination
  6538.     DS:DX -> ASCIZ full program name
  6539.     ES:BX -> parameter block (as for AX=4B00h)
  6540. Return: CF clear if successful
  6541.         AX = Command Subgroup ID (CSID)
  6542.     CF set on error
  6543.         AX = error code (see #0885 at AH=59h)
  6544. Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
  6545.       by several other European OEMs; its release falls between mainstream
  6546.       versions 3.2 and 3.3
  6547. Desc:    asynchronously execute a program, creating a new process for it
  6548. Notes:    this function is called by the DETACH command
  6549.     there is a system-wide limit of 32 processes
  6550.     the CSID is used to identify all processes that have been spawned by
  6551.       a given process, whether directly or indirectly
  6552.     programs to be run in the background must use the new executable format
  6553.       (see #0809 at AH=4Bh)
  6554.     background processes may only perform asynchronous (background) EXECs,
  6555.       either this function or AX=4B04h
  6556.     background processes may execute INT 11, INT 12, INT 21, INT 2A, and
  6557.       INT 2F at any time; they may execute INT 10 and INT 16 only while
  6558.       they have opened a popup screen via INT 2F/AX=1401h; no other
  6559.       interrupts may be executed from the background
  6560.     background processes may not use drive B: or overlay their code
  6561.       segments
  6562.     see AX=8700h for an installation check
  6563.     the "NE" new executable format made its first appearance in European
  6564.       MS-DOS 4.0
  6565. SeeAlso: AH=4Bh,AH=87h,INT 2F/AX=1400h"POPUP"
  6566. ----------218080-----------------------------
  6567. INT 21 - PCW Weather Card interface - UNINSTALL PCW.COM AND FREE MEMORY
  6568.     AX = 8080h
  6569. Return: ???
  6570. SeeAlso: AX=7070h/BX=7070h
  6571. --------D-2181-------------------------------
  6572. INT 21 - European MS-DOS 4.0 - "FREEZE" - STOP A PROCESS
  6573.     AH = 81h
  6574.     BX = flag (00h freeze command subtree, 01h only specified process)
  6575.     CX = Process ID of head of command subtree
  6576. Return: CF clear if successful
  6577.     CF set on error
  6578.         AX = error code (no such process)
  6579. Desc:    temporarily suspend a process or a process and all of its children
  6580. Note:    if BX=0001h, this call will not return until the process is actually
  6581.       frozen, which may not be until after it unblocks from an I/O
  6582.       operation
  6583. SeeAlso: AH=82h,AH=89h,AX=8E00h,INT 15/AX=101Dh
  6584. --------D-2182-------------------------------
  6585. INT 21 - European MS-DOS 4.0 - "RESUME" - RESTART A PROCESS
  6586.     AH = 82h
  6587.     BX = flag (00h resume command subtree, 01h only specified process)
  6588.     CX = Process ID of head of command subtree
  6589. Return: CF clear if successful
  6590.     CF set on error
  6591.         AX = error code (no such process)
  6592. Desc:    restart a previously-suspended process or a process and all of its
  6593.       children
  6594. SeeAlso: AH=81h,INT 15/AX=101Eh
  6595. --------D-2183-------------------------------
  6596. INT 21 - European MS-DOS 4.0 - "PARTITION" - GET/SET FOREGROUND PARTITION SIZE
  6597.     AH = 83h
  6598.     AL = function
  6599.         00h get size
  6600.         01h set new size
  6601.         BX = new size in paragraphs
  6602. Return: CF clear if successful
  6603.         BX = current size (function 00h) or old size (function 01h)
  6604.     CF set on error
  6605.         AX = error code (01h,07h,0Dh)(see #0885 at AH=59h)
  6606. Desc:    specify or determine how much memory may be allocated by the foreground
  6607.       process
  6608. Note:    if the partition size is set to 0000h, no partition management is done
  6609.       and all memory allocation is compatible with DOS 3.2.
  6610.     the partition size can be changed regardless of what use is being made
  6611.       of the changed memory; subsequent allocations will follow the
  6612.       partition rules (foreground processes may allocate only foreground
  6613.       memory; background processes allocate background memory first, then
  6614.       foreground memory)
  6615. SeeAlso: AH=48h,AH=4Ah
  6616. --------v-2183-------------------------------
  6617. INT 21 - VIRUS - "SVC" - INSTALLATION CHECK
  6618.     AH = 83h
  6619. Return: DX = 1990h if resident
  6620. SeeAlso: AH=76h,AH=84h"VIRUS"
  6621. --------v-2184-------------------------------
  6622. INT 21 - VIRUS - "SVC 5.0" or "SVC 6.0" - INSTALLATION CHECK
  6623.     AH = 84h
  6624. Return: DX = 1990h if resident
  6625.         BH = version number (major in high nybble, minor in low)
  6626. SeeAlso: AH=83h"VIRUS",AH=89h"VIRUS"
  6627. --------D-218400-----------------------------
  6628. INT 21 - European MS-DOS 4.0 - "CREATMEM" - CREATE A SHARED MEMORY AREA
  6629.     AX = 8400h
  6630.     BX = size in bytes (0000h = 65536)
  6631.     CX = flags
  6632.         bit 6: zero-initialize segment
  6633.     DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
  6634. Return: CF clear if successful
  6635.         AX = segment address of shared memory global object
  6636.     CF set on error
  6637.         AX = error code (06h,08h) (see #0885 at AH=59h)
  6638. Desc:    create an area of memory which may be accessed by multiple processes
  6639. Notes:    shared memory objects are created as special files (thus the
  6640.       restriction on the name)
  6641.     on successful creation, the reference count is set to 1
  6642. SeeAlso: AX=8401h,AX=8402h,INT 15/AX=DE19h
  6643. --------D-218401-----------------------------
  6644. INT 21 - European MS-DOS 4.0 - "GETMEM" - OBTAIN ACCESS TO SHARED MEMORY AREA
  6645.     AX = 8401h
  6646.     CX = flags
  6647.         bit 7: writable segment (ignored by MS-DOS 4.0)
  6648.     DS:DX -> ASCIZ name (must begin with "\SHAREMEM\")
  6649. Return: CF clear if successful
  6650.         AX = segment address of shared memory global object
  6651.         CX = size in bytes
  6652.     CF set on error
  6653.         AX = error code (invalid name)
  6654. Desc:    get address of a previously-created area of memory which may be
  6655.       accessed by multiple processes
  6656. Note:    this call increments the reference count for the shared memory area
  6657. SeeAlso: AX=8400h,AX=8402h
  6658. --------D-218402-----------------------------
  6659. INT 21 - European MS-DOS 4.0 - "RELEASEMEM" - FREE SHARED MEMORY AREA
  6660.     AX = 8402h
  6661.     BX = handle (segment address of shared memory object)
  6662. Return: CF clear if successful
  6663.     CF set on error
  6664.         AX = error code (no such name)
  6665. Desc:    indicate that the specified area of shared memory will no longer be
  6666.       used by the caller
  6667. Note:    the reference count is decremented and the shared memory area is
  6668.       deallocated if the new reference count is zero
  6669. SeeAlso: AX=8400h,AX=8401h,INT 15/AX=DE19h
  6670. --------D-2185-------------------------------
  6671. INT 21 U - European MS-DOS 4.0 - ???
  6672.     AH = 85h
  6673.     ???
  6674. Return: ???
  6675. --------D-2186-------------------------------
  6676. INT 21 - European MS-DOS 4.0 - "SETFILETABLE" - INSTALL NEW FILE HANDLE TABLE
  6677.     AH = 86h
  6678.     BX = total number of file handles in new table
  6679. Return: CF clear if successful
  6680.     CF set on error
  6681.         AX = error code (06h,08h) (see #0885 at AH=59h)
  6682. Desc:    adjust the size of the per-process open file table, thus raising or
  6683.       lowering the limit on the number of files the caller can open
  6684.       simultaneously
  6685. Notes:    any currently-open files are copied to the new table
  6686.     if the table is increased beyond the default 20 handles, only the
  6687.       first 20 will be inherited by child processes
  6688.     error 06h is returned if the requested number of handles exceeds
  6689.       system limits or would require closing currently-open files
  6690. SeeAlso: AH=26h,AH=67h
  6691. --------D-2187-------------------------------
  6692. INT 21 - European MS-DOS 4.0 - "GETPID" - GET PROCESS IDENTIFIER
  6693.     AH = 87h
  6694. Return: AX = PID
  6695.     BX = parent process's PID
  6696.     CX = Command Subgroup ID (CSID)
  6697. Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
  6698.       by several other European OEMs; its release falls between mainstream
  6699.       versions 3.2 and 3.3
  6700. Desc:    determine an identifier by which to access the calling process
  6701. Notes:    called by MS C v5.1 getpid() function
  6702.     this function apparently must return AX=0001h for INT 21/AH=80h to
  6703.       succeed
  6704.     one possible check for European MS-DOS 4.0 is to issue this call with
  6705.       AL=00h and check whether AL is nonzero on return
  6706. SeeAlso: AH=30h,AH=62h,AH=80h
  6707. Index:    installation check;European MS-DOS 4.0
  6708. --------D-2188-------------------------------
  6709. INT 21 U - European MS-DOS 4.0 - ???
  6710.     AH = 88h
  6711.     ???
  6712. Return: ???
  6713. SeeAlso: AH=87h
  6714. --------D-2189-------------------------------
  6715. INT 21 - European MS-DOS 4.0 - SLEEP
  6716.     AH = 89h
  6717.     CX = time in milliseconds or 0000h to give up time slice
  6718. Return: CF clear if successful
  6719.         CX = 0000h
  6720.     CF set on error
  6721.         AX = error code (interrupted system call)
  6722.         CX = sleep time remaining
  6723. Desc:    suspend the calling process for the specified duration
  6724. Notes:    the sleep interval is rounded up to the next higher increment of the
  6725.       scheduler clock, and may be extended further if other processes are
  6726.       running
  6727.     this call may be interrupted by signals (see AH=8Dh)
  6728.     reportedly called by Microsoft C 4.0 startup code
  6729.     background processes have higher priority than the foreground process,
  6730.       and should thus periodically yield the CPU
  6731. SeeAlso: AH=81h,INT 15/AX=1000h,INT 2F/AX=1680h,INT 7A/BX=000Ah
  6732. --------v-2189-------------------------------
  6733. INT 21 - VIRUS - "Vriest" - INSTALLATION CHECK
  6734.     AH = 89h
  6735. Return: AX = 0123h if resident
  6736. SeeAlso: AH=84h"VIRUS",AH=90h"VIRUS"
  6737. --------D-218A-------------------------------
  6738. INT 21 - European MS-DOS 4.0 - "CWAIT" - WAIT FOR CHILD TO TERMINATE
  6739.     AH = 8Ah
  6740.     BL = range (00h command subtree, 01h any child)
  6741.     BH = suspend flag
  6742.         00h suspend if children exist but none are dead
  6743.         01h return if no dead children
  6744.     CX = Process ID of head of command subtree
  6745. Return: CF clear if successful
  6746.         AH = termination type (see #0970)
  6747.         AL = return code from child or aborting signal
  6748.         BX = PID of child (0000h if no dead children)
  6749.     CF set on error
  6750.         AX = error code (no child,interrupted system call)
  6751. Desc:    get return code from an asynchronously-executed child program,
  6752.       optionally waiting if no return code is available
  6753. SeeAlso: AH=4Bh,AH=4Dh,AH=80h,AH=8Dh
  6754.  
  6755. (Table 0970)
  6756. Values for termination type:
  6757.  00h    normal termination
  6758.  01h    aborted by Control-C
  6759.  02h    aborted by I/O error
  6760.  03h    terminate and stay resident
  6761.  04h    aborted by signal
  6762.  05h    aborted by program error
  6763. --------D-218B-------------------------------
  6764. INT 21 U - European MS-DOS 4.0 - ???
  6765.     AH = 8Bh
  6766.     ???
  6767. Return: ???
  6768. SeeAlso: AH=87h
  6769. --------D-218C-------------------------------
  6770. INT 21 - European MS-DOS 4.0 - SET SIGNAL HANDLER
  6771.     AH = 8Ch
  6772.     AL = signal number (see #0971)
  6773.     BL = action (see #0972)
  6774.     DS:DX -> signal handler (see #0973)
  6775. Return: CF clear if successful
  6776.         AL = previous action
  6777.         ES:BX -> previous signal handler
  6778.     CF set on error
  6779.         AX = error code (01h,invalid SigNumber or Action)
  6780.           (see #0885 at AH=59h)
  6781. Desc:    set the routine which will be invoked on a number of exceptional
  6782.       conditions
  6783. Note:    all signals will be sent to the most recently installed handler
  6784. SeeAlso: AH=8Dh
  6785.  
  6786. (Table 0971)
  6787. Values for European MS-DOS 4.0 signal number:
  6788.  01h    SIGINTR        Control-C or user defined interrupt key
  6789.  08h    SIGTERM        program termination
  6790.  09h    SIGPIPE        broken pipe
  6791.  0Dh    SIGUSER1    reserved for user definition
  6792.  0Eh    SIGUSER2    reserved for user definition
  6793.  
  6794. (Table 0972)
  6795. Values for signal action:
  6796.  00h    SIG_DFL        terminate process on receipt
  6797.  01h    SIG_IGN        ignore signal
  6798.  02h    SIG_GET        signal is accepted
  6799.  03h    SIG_ERR        sender gets error
  6800.  04h    SIG_ACK        acknowledge received signal and clear it, but don't
  6801.               change current setting
  6802.  
  6803. (Table 0973)
  6804. Values signal handler is called with:
  6805.     AL = signal number (see #0971)
  6806.     AH = signal argument
  6807. Return: RETF, CF set: terminate process
  6808.     RETF, CF clear, ZF set: abort any interrupted system call with an error
  6809.     RETF, CF clear, ZF clear: restart any interrupted system call
  6810.     IRET: restart any interrupted system call
  6811. Note:    the signal handler may also perform a nonlocal GOTO by resetting the
  6812.       stack pointer and jumping; before doing so, it should dismiss the
  6813.       signal by calling this function with BL=04h
  6814. --------D-218D-------------------------------
  6815. INT 21 - European MS-DOS 4.0 - SEND SIGNAL
  6816.     AH = 8Dh
  6817.     AL = signal number (see #0971)
  6818.     BH = signal argument
  6819.     BL = action
  6820.         00h send to entire command subtree
  6821.         01h send only to specified process
  6822.     DX = Process ID
  6823. Return: CF clear if successful
  6824.     CF set on error
  6825.         AX = error code (01h,06h)(see #0885 at AH=59h)
  6826. Desc:    invoke the exceptional-condition handler for the specified process
  6827. Note:    error 06h may be returned if one or more of the affected processes
  6828.       have an error handler for the signal
  6829. SeeAlso: AH=8Ch
  6830. --------D-218E00BH00-------------------------
  6831. INT 21 - European MS-DOS 4.0 - "SETPRI" - GET/SET PROCESS PRIORITY
  6832.     AX = 8E00h
  6833.     BH = 00h
  6834.     BL = action
  6835.         00h set priority for command subtree
  6836.         01h set priority for specified process only
  6837.     CX = Process ID
  6838.     DH = 00h
  6839.     DL = change in priority (00h to get priority)
  6840. Return: CF clear if successful
  6841.         DL = process priority
  6842.         DH destroyed
  6843.     CF set on error
  6844.         AX = error code (01h,no such process)(see #0885 at AH=59h)
  6845. Desc:    specify or determine the execution priority of the specified process
  6846.       or the process and all of its children
  6847. SeeAlso: AH=81h
  6848. --------D-218F-------------------------------
  6849. INT 21 U - European MS-DOS 4.0 - ???
  6850.     AH = 8Fh
  6851.     ???
  6852. Return: ???
  6853. SeeAlso: AH=87h
  6854. --------D-2190-------------------------------
  6855. INT 21 U - European MS-DOS 4.0 - ???
  6856.     AH = 90h
  6857.     ???
  6858. Return: ???
  6859. SeeAlso: AH=87h
  6860. --------v-2190-------------------------------
  6861. INT 21 - VIRUS - "Carioca" - INSTALLATION CHECK
  6862.     AH = 90h
  6863. Return: AH = 01h if resident
  6864. SeeAlso: AH=89h"VIRUS",AX=9753h"VIRUS"
  6865. --------D-2191-------------------------------
  6866. INT 21 U - European MS-DOS 4.0 - ???
  6867.     AH = 91h
  6868.     ???
  6869. Return: ???
  6870. SeeAlso: AH=87h
  6871. --------D-2192-------------------------------
  6872. INT 21 U - European MS-DOS 4.0 - ???
  6873.     AH = 92h
  6874.     ???
  6875. Return: ???
  6876. SeeAlso: AH=87h
  6877. --------D-2193-------------------------------
  6878. INT 21 - European MS-DOS 4.0 - "PIPE" - CREATE A NEW PIPE
  6879.     AH = 93h
  6880.     CX = size in bytes
  6881. Return: CF clear if successful
  6882.         AX = read handle
  6883.         BX = write handle
  6884.     CF set on error
  6885.         AX = error code (08h) (see #0885 at AH=59h)
  6886. Desc:    create a communications channel which may be used for interprocess
  6887.       data and command exchanges
  6888. SeeAlso: AH=3Ch,AH=3Fh,AH=40h,AH=84h
  6889. --------D-2194-------------------------------
  6890. INT 21 U - European MS-DOS 4.0 - ???
  6891.     AH = 94h
  6892.     ???
  6893. Return: ???
  6894. SeeAlso: AH=87h
  6895. --------D-2195-------------------------------
  6896. INT 21 - European MS-DOS 4.0 - HARD ERROR PROCESSING
  6897.     AH = 95h
  6898.     AL = new state
  6899.        00h enabled
  6900.        01h disabled, automatically fail hard errors
  6901. Return: AX = previous setting
  6902. Desc:    specify whether hard (critical) errors should automatically fail the
  6903.       system call or invoke an INT 24
  6904. SeeAlso: INT 24
  6905. --------D-2196-------------------------------
  6906. INT 21 U - European MS-DOS 4.0 - ???
  6907.     AH = 96h
  6908.     ???
  6909. Return: ???
  6910. --------D-2197-------------------------------
  6911. INT 21 U - European MS-DOS 4.0 - ???
  6912.     AH = 97h
  6913.     ???
  6914. Return: ???
  6915. --------v-219753-----------------------------
  6916. INT 21 - VIRUS - "Nina" - INSTALLATION CHECK
  6917.     AX = 9753h
  6918. Return: never (executes original program) if virus resident
  6919. SeeAlso: AH=90h"VIRUS",AX=A1D5h"VIRUS"
  6920. --------D-2198-------------------------------
  6921. INT 21 U - European MS-DOS 4.0 - ???
  6922.     AH = 98h
  6923.     ???
  6924. Return: ???
  6925. --------D-2199-------------------------------
  6926. INT 21 u - European MS-DOS 4.0 - "PBLOCK" - BLOCK A PROCESS
  6927.     AH = 99h
  6928.     DS:BX -> memory location to block on
  6929.     CX = timeout in milliseconds
  6930.     DH = nonzero if interruptable
  6931. Return: CF clear if awakened by event
  6932.         AX = 0000h
  6933.     CF set if unusual wakeup
  6934.         ZF set if timeout, clear if interrupted by signal
  6935.         AX = nonzero
  6936. Desc:    suspend calling process until another process sends a "restart" signal
  6937.       or a timeout occurs
  6938. SeeAlso: AH=9Ah,INT 2F/AX=0802h
  6939. --------D-219A-------------------------------
  6940. INT 21 u - European MS-DOS 4.0 - "PRUN" - UNBLOCK A PROCESS
  6941.     AH = 9Ah
  6942.     DS:BX -> memory location processes may have blocked on
  6943. Return: AX = number of processes awakened
  6944.     ZF set if no processes awakened
  6945. Program: European MS-DOS 4.0 was written for Siemens in Germany and then used
  6946.       by several other European OEMs; its release falls between mainstream
  6947.       versions 3.2 and 3.3
  6948. Desc:    restart all processes waiting for the specified "restart" signal
  6949. SeeAlso: AH=99h,INT 2F/AX=0802h
  6950. --------I-21A0-------------------------------
  6951. INT 21 - Attachmate Extra! - GET 3270 DISPLAY STATE
  6952.     AH = A0h
  6953. Return: AL = display status (see #0974)
  6954.     BX = host window status (see #0975)
  6955. Program: Attachmate Extra! is a 3270 emulator by Attachmate Corporation
  6956. SeeAlso: AH=A1h
  6957.  
  6958. Bitfields for Attachmate Extra! display status:
  6959. Bit(s)    Description    (Table 0974)
  6960.  7    0=windowed, 1=enlarged
  6961.  6-3    current screen profile number 0-9
  6962.  2-0    active window number (0=PC, 1-4=host B-E, 5-6=notepad F-G)
  6963.  
  6964. Bitfields for host window status:
  6965. Bit(s)    Description    (Table 0975)
  6966.  15    reserved
  6967.  14    0=host E window installed, 1=not
  6968.  13    0=host E terminal on, 1=off
  6969.  12    0=host E window displayed, 1=not
  6970.  11    reserved
  6971.  10    0=host D window installed, 1=not
  6972.  9    0=host D terminal on, 1=off
  6973.  8    0=host D window displayed, 1=not
  6974.  7    reserved
  6975.  6    0=host C window installed, 1=not
  6976.  5    0=host C terminal on, 1=off
  6977.  4    0=host C window displayed, 1=not
  6978.  3    reserved
  6979.  2    0=host B window installed, 1=not
  6980.  1    0=host B terminal on, 1=off
  6981.  0    0=host B window displayed, 1=not
  6982. --------I-21A1-------------------------------
  6983. INT 21 - Attachmate Extra! - SET 3270 DISPLAY STATE
  6984.     AH = A1h
  6985.     AL = new display status byte (see #0974)
  6986. SeeAlso: AH=A0h,AH=A2h
  6987. --------v-21A1D5-----------------------------
  6988. INT 21 - VIRUS - "789"/"Filehider" - INSTALLATION CHECK
  6989.     AX = A1D5h
  6990. Return: AX = 900Dh if resident
  6991. SeeAlso: AX=9753h,AX=A55Ah
  6992. --------I-21A2-------------------------------
  6993. INT 21 - Attachmate Extra! - SET HOST WINDOW STATE
  6994.     AH = A2h
  6995.     AL = new host window status byte (see #0976)
  6996. SeeAlso: AH=A1h
  6997.  
  6998. Bitfields for Attachmate Extra! host window status:
  6999. Bit(s)    Description    (Table 0976)
  7000.  7    0=power off, 1=power on
  7001.  6    0=not installed, 1=installed
  7002.  5-3    reserved
  7003.  2-0    window number 1-4=host B-E
  7004. --------I-21A3-------------------------------
  7005. INT 21 - Attachmate Extra! - SEND KEYSTROKES TO HOST WINDOW
  7006.     AH = A3h
  7007.     AL = window number (1-4=host B-E)
  7008.     CX = 0001h
  7009.     DS:BX -> keystroke buffer
  7010.     DL = zero if keystroke buffer contains host function code (see #0977),
  7011.           non-zero if keystroke buffer contains ASCII character
  7012. Return: CX = zero if character sent, non-zero if not
  7013.     BX incremented if CX=0
  7014.  
  7015. (Table 0977)
  7016. Values for Attachmate Extra! host function code:
  7017.  00h=reserved    10h=PF16    20h=Clear    30h=SysReq
  7018.  01h=PF1    11h=PF17    21h=Print    31h=ErInp
  7019.  02h=PF2    12h=PF18    22h=Left    32h=ErEof
  7020.  03h=PF3    13h=PF19    23h=Right    33h=Ident
  7021.  04h=PF4    14h=PF20    24h=Up        34h=Test
  7022.  05h=PF5    15h=PF21    25h=Down    35h=Reset
  7023.  06h=PF6    16h=PF22    26h=Home    36h=DevCncl
  7024.  07h=PF7    17h=PF23    27h=Fast Left    37h=Dup
  7025.  08h=PF8    18h=PF24    28h=Fast Right    38h=FldMark
  7026.  09h=PF9    19h=Alt on    29h=Bksp    39h=Enter
  7027.  0Ah=PF10    1Ah=Alt off    2Ah=Insert    3Ah=CrSel
  7028.  0Bh=PF11    1Bh=Shift on    2Bh=Delete
  7029.  0Ch=PF12    1Ch=Shift off    2Ch=Backtab
  7030.  0Dh=PF13    1Dh=PA1        2Dh=Tab
  7031.  0Eh=PF14    1Eh=PA2        2Eh=Newline
  7032.  0Fh=PF15    1Fh=PA3        2Fh=Attn
  7033. --------I-21A4-------------------------------
  7034. INT 21 - Attachmate Extra! - GET HOST WINDOW BUFFER ADDRESS
  7035.     AH = A4h
  7036.     AL = window number (1-4=host B-E)
  7037. Return: DS:BX -> 3270 display buffer
  7038. SeeAlso: AH=A5h,AH=B8h
  7039. --------I-21A5-------------------------------
  7040. INT 21 - Attachmate Extra! - GET HOST WINDOW CURSOR POSITION
  7041.     AH = A5h
  7042.     AL = window number (1-4=host B-E)
  7043. Return: BX = cursor position (80 * row + column, where 0:0 is upper left)
  7044. Note:    if the host window is configured with the Extended Attribute (EAB)
  7045.       feature, multiply the cursor position by 2 to obtain the byte offset
  7046.       into the display buffer
  7047. SeeAlso: AH=A4h
  7048. --------v-21A55A-----------------------------
  7049. INT 21 - VIRUS - "Eddie-2" - INSTALLATION CHECK
  7050.     AX = A55Ah
  7051. Return: AX = 5AA5h if resident
  7052. SeeAlso: AX=A1D5h,AX=AA00h
  7053. --------v-21AA00-----------------------------
  7054. INT 21 - VIRUS - "Blinker" - INSTALLATION CHECK
  7055.     AX = AA00h
  7056. Return: AX = 00AAh if resident
  7057. SeeAlso: AX=A55Ah,AX=AA03h
  7058. --------v-21AA03-----------------------------
  7059. INT 21 - VIRUS - "Backtime" - INSTALLATION CHECK
  7060.     AX = AA03h
  7061. Return: AX = 03AAh if resident
  7062. SeeAlso: AX=AA00h,AH=ABh
  7063. --------v-21AB-------------------------------
  7064. INT 21 - VIRUS - "600" or "Voronezh"-family - INSTALLATION CHECK
  7065.     AH = ABh
  7066. Return: AX = 5555h if resident
  7067. SeeAlso: AX=AA03h,AX=BBBBh"VIRUS"
  7068. --------I-21AF-------------------------------
  7069. INT 21 - Attachmate Extra! - GET TRANSLATE TABLE ADDRESS
  7070.     AH = AFh
  7071. Return: DS:BX -> translate tables (see #0978)
  7072.  
  7073. Format of Attachmate Extra! translate tables:
  7074. Offset    Size    Description    (Table 0978)
  7075.  00h 256 BYTEs    ASCII to 3270 buffer code translate table
  7076. 100h 256 BYTEs    3270 buffer code to ASCII translate table
  7077. 200h 256 BYTEs    3270 buffer code to EBCDIC translate table
  7078. 300h 256 BYTEs    EBCDIC to 3270 buffer code translate table
  7079. --------N-21B300-----------------------------
  7080. INT 21 U - Novell NetWare - CHECK LIP/PACKET SIGNING/IPX CHECKSUM SUPPORT???
  7081.     AX = B300h
  7082. Return: AX = 0000h if supported???
  7083. Note:    this function appeared with the packet signing/Large Internet Packets/
  7084.       IPX Checksum-aware NetWare shells
  7085. SeeAlso: AX=B301h,AX=B302h
  7086. --------N-21B301-----------------------------
  7087. INT 21 U - Novell NetWare - CHECK SIGNATURE LEVEL???
  7088.     AX = B301h
  7089. Return: AX = 0000h if supported???
  7090.         BX:CX indicate signature level (see #0979)
  7091. Note:    this function appeared with the packet signing/Large Internet Packets/
  7092.       IPX Checksum-aware NetWare shells
  7093. SeeAlso: AX=B300h,AX=B304h,#1581 at INT 2F/AX=7A20h/BX=0000h
  7094.  
  7095. (Table 0979)
  7096. Values for signature level indicator:
  7097.  0000h:0000h = signature level 0
  7098.  0002h:0000h = signature level 1
  7099.  0202h:0000h = signature level 2
  7100.  0202h:0202h = signature level 3
  7101. --------N-21B302-----------------------------
  7102. INT 21 U - Novell NetWare - START PACKET SIGNING
  7103.     AX = B302h
  7104.     CX = server connection (1-8)
  7105.     DS:SI -> 24-byte buffer containing ???
  7106. Return: ???
  7107. Notes:    this function appeared with the packet signing/Large Internet Packets/
  7108.       IPX Checksum-aware NetWare shells
  7109.     if packet signing is active, this call is required if and only if the
  7110.       last call successfully authenticated the workstation to the server
  7111. SeeAlso: AX=B300h,#1581
  7112. --------N-21B304-----------------------------
  7113. INT 21 U - Novell NetWare - SET SIGNATURE LEVEL
  7114.     AX = B304h
  7115.     BX:CX = new signature level (see AX=B301h)
  7116. Return: ???
  7117. Note:    this function appeared with the packet signing/Large Internet Packets/
  7118.       IPX Checksum-aware NetWare shells
  7119. SeeAlso: AX=B300h,AX=B301h,AX=B306h,#1581
  7120. --------N-21B306-----------------------------
  7121. INT 21 - Novell NetWare - RENEGOTIATE SECURITY LEVEL
  7122.     AX = B306h
  7123.     CX = server connection number (01h-08h)
  7124. Return: ???
  7125. Note:    this function appeared with the packet signing/Large Internet Packets/
  7126.       IPX Checksum-aware NetWare shells
  7127. SeeAlso: AX=B300h,AX=B304h,#1581
  7128. --------N-21B4-------------------------------
  7129. INT 21 U - Novell NetWare - "AttachHandle"
  7130.     AH = B4h
  7131.     DS:SI -> input buffer (see #0980)
  7132. Return: AX = DOS file handle or return code
  7133. Note:    this is an interface provided by NetWare to give DOS file access to
  7134.       NetWare files on non-DOS systems such as Macintosh, OS/2, and Unix
  7135. SeeAlso: AX=E909h
  7136.  
  7137. Format of Novell NetWare input buffer:
  7138. Offset    Size    Description    (Table 0980)
  7139.  00h    BYTE    "WorkFileServer"
  7140.  01h    BYTE    access code
  7141.  02h    DWORD    "OpenHandle"
  7142.  06h    WORD    "OpenHandleCount"
  7143.  08h    DWORD    "OpenFileSize"
  7144. Note:    the six bytes at 02h-07h appear to be the six-byte NetWare handle
  7145.       returned by AX=E909h
  7146. --------N-21B500-----------------------------
  7147. INT 21 U - Novell NetWare - VNETWARE.386 API - GET INSTANCE DATA
  7148.     AX = B500h
  7149. Return: ES:BX -> data
  7150.     CX = length
  7151. SeeAlso: AX=B501h,AX=B502h
  7152. --------N-21B501-----------------------------
  7153. INT 21 U - Novell NetWare - VNETWARE.386 API - END VIRTUAL MACHINE
  7154.     AX = B501h
  7155. SeeAlso: AX=B500h,AX=B502h
  7156. --------N-21B502-----------------------------
  7157. INT 21 U - Novell NetWare - VNETWARE.386 API - START VIRTUAL MACHINE
  7158.     AX = B502h
  7159. SeeAlso: AX=B500h,AX=B501h
  7160. --------N-21B5-------------------------------
  7161. INT 21 - Novell NetWare shell 3.01 - TASK MODE CONTROL
  7162.     AH = B5h
  7163.     AL = subfunction
  7164.         03h get task mode
  7165.         Return: AH = 00h
  7166.             AL = current task mode byte (see #0981)
  7167.         04h get task mode pointer
  7168.         Return: ES:BX -> task mode byte
  7169. Notes:    the task mode byte specifies how task cleanup should be performed, but
  7170.       is declared to be version-dependent
  7171.     allows a program to disable the automatic cleanup for programs managing
  7172.       task swapping, etc.
  7173.  
  7174. (Table 0981)
  7175. Values for NetWare task mode byte in version 3.01:
  7176.  00h-03h reserved
  7177.  04h     no task cleanup
  7178. --------N-21B505-----------------------------
  7179. INT 21 U - Novell NetWare - VNETWARE.386 API - SET VIRTUAL MACHINE ID
  7180.     AX = B505h
  7181.     ???
  7182. Return: ???
  7183. SeeAlso: AX=B502h,AX=B506h
  7184. --------N-21B506-----------------------------
  7185. INT 21 U - Novell NetWare - VNETWARE.386 API - GET VIRTUAL MACH SUPPORT LEVEL
  7186.     AX = B506h
  7187. Return: AX = ??? (0002h)
  7188. SeeAlso: AX=B505h
  7189. --------N-21B507-----------------------------
  7190. INT 21 - Novell NetWare - NetWare Shell - GET NUMBER OF PACKET BURST BUFFERS
  7191.     AX = B507h
  7192. Return: AL = number of packet burst buffers (configured at shell load time)
  7193. --------N-21B6-------------------------------
  7194. INT 21 - Novell NetWare - FILE SERVICES - EXTENDED FILE ATTRIBUTES
  7195.     AH = B6h
  7196.     AL = subfunction
  7197.         00h get extended file attributes
  7198.         01h set extended file attributes
  7199.         CL = extended file attributes (see #0982)
  7200.     DS:DX -> ASCIZ pathname (max 255 bytes)
  7201. Return: CF set on error
  7202.         AL = error code
  7203.         8Ch caller lacks privileges
  7204.         FEh not permitted to search directory
  7205.         FFh file not found
  7206.     CF clear if successful
  7207.         AL = 00h (success)
  7208.         CL = current extended file attributes (see #0982)
  7209. Note:    this function is supported by Advanced NetWare 2.1+
  7210. SeeAlso: AX=4300h,AH=E3h/SF=0Fh
  7211.  
  7212. Bitfields for NetWare extended file attributes:
  7213. Bit(s)    Description    (Table 0982)
  7214.  2-0    search mode (executables only)
  7215.     000 none (use shell's default search)
  7216.     001 search on all opens without path
  7217.     010 do not search
  7218.     011 search on read-only opens without path
  7219.     100 reserved
  7220.     101 search on all opens
  7221.     110 reserved
  7222.     111 search on all read-only opens
  7223.  3    reserved
  7224.  4    transactions on file tracked
  7225.  5    file's FAT indexed
  7226.  6    read audit (to be implemented)
  7227.  7    write audit (to be implemented)
  7228. --------N-21B7-------------------------------
  7229. INT 21 U - Novell NetWare - "HoldFileModeSet" (obsolete)
  7230.     AH = B7h
  7231.     AL = new value for HoldFileFlag
  7232. Return: AL = previous value of HoldFileFlag
  7233. Note:    this function provided backward compatibility with a bug in early
  7234.       DOS versions and CP/M, but is no longer used or supported
  7235. --------I-21B8-------------------------------
  7236. INT 21 - Attachmate Extra! - DISABLE HOST BUFFER UPDATES
  7237.     AH = B8h
  7238.     AL = window number (1-4=host B-E)
  7239.     DL = 01h
  7240. Notes:    only valid in CUT mode
  7241.     next AID keystroke (eg Enter) enables host buffer updates
  7242. SeeAlso: AH=A4h
  7243. --------N-21B800-----------------------------
  7244. INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT CAPTURE FLAGS
  7245.     AX = B800h
  7246.     CX = size of reply buffer (01h-3Fh)
  7247.     ES:BX -> reply buffer for capture flags table (see #0983)
  7248. Return: AL = status
  7249.         00h successful
  7250. Note:    this function is supported by Advanced NetWare 2.0+
  7251. SeeAlso: AX=B801h,AX=B802h,AH=DFh/DL=00h,AH=DFh/DL=04h
  7252.  
  7253. Format of NetWare capture flags table:
  7254. Offset    Size    Description    (Table 0983)
  7255.  00h    BYTE    status (used internally, should be set to 00h)
  7256.  01h    BYTE    print flags (see #0984)
  7257.  02h    BYTE    tab size (01h-12h, default 08h)
  7258.  03h    BYTE    printer number on server (00h-04h, default 00h)
  7259.  04h    BYTE    number of copies to print (00h-FFh, default 01h)
  7260.  05h    BYTE    form type required in printer (default 00h)
  7261.  06h    BYTE    reserved
  7262.  07h 13 BYTEs    text to be placed on banner page
  7263.  14h    BYTE    reserved
  7264.  15h    BYTE    default local printer (00h = LPT1)
  7265.  16h    WORD    (big-endian) timeout in clock ticks for flushing capture file
  7266.           on inactivity, or 0000h to disable timeout
  7267.  18h    BYTE    flush capture file on LPT close if nonzero
  7268.  19h    WORD    (big-endian) maximum lines per page
  7269.  1Bh    WORD    (big-endian) maximum characters per line
  7270.  1Dh 13 BYTEs    name of form required in printer
  7271.  2Ah    BYTE    LPT capture flag
  7272.         00h inactive, FFh LPT device is being captured
  7273.  2Bh    BYTE    file capture flag
  7274.         00h if no file specified, FFh if capturing to file
  7275.  2Ch    BYTE    timing out (00h if no timeout in effect, FFh if timeout counter
  7276.           running)
  7277.  2Dh    DWORD    (big-endian) address of printer setup string
  7278.  31h    DWORD    (big-endian) address of printer reset string
  7279.  35h    BYTE    target connection ID
  7280.  36h    BYTE    capture in progress if FFh
  7281.  37h    BYTE    job queued for printing if FFh
  7282.  38h    BYTE    print job valid if FFh
  7283.  39h    DWORD    bindery object ID of print queue if previous byte FFh
  7284.  3Dh    WORD    (big-endian) print job number (1-999)
  7285.  
  7286. Bitfields for NetWare print flags:
  7287. Bit(s)    Description    (Table 0984)
  7288.  2    print capture file if interrupted by loss of connection
  7289.  3    no automatic form feed after print job
  7290.  6    printing control sequences interpreted by print service
  7291.  7    print banner page before capture file
  7292. --------N-21B801-----------------------------
  7293. INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT CAPTURE FLAGS
  7294.     AX = B801h
  7295.     CX = size of buffer (01h-3Fh)
  7296.     ES:BX -> buffer containing capture flags table (see #0983)
  7297. Return: AL = status
  7298.         00h successful
  7299. Note:    this function is supported by Advanced NetWare 2.0+
  7300. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  7301. --------N-21B802-----------------------------
  7302. INT 21 - Novell NetWare - PRINT SERVICES - GET SPECIFIC CAPTURE FLAGS
  7303.     AX = B802h
  7304.     CX = size of reply buffer (01h-3Fh)
  7305.     DH = LPT port (00h-02h)
  7306.     ES:BX -> reply buffer for capture flags table (see #0983)
  7307. Return: AL = status
  7308.         00h successful
  7309. Note:    this function is supported by Advanced NetWare 2.1+
  7310. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  7311. --------N-21B803-----------------------------
  7312. INT 21 - Novell NetWare - PRINT SERVICES - SET SPECIFIC CAPTURE FLAGS
  7313.     AX = B803h
  7314.     CX = size of buffer (01h-3Fh)
  7315.     DH = LPT port (00h-02h)
  7316.     ES:BX -> buffer containing capture flags table (see #0983)
  7317. Return: AL = status
  7318.         00h successful
  7319. Note:    this function is supported by Advanced NetWare 2.1+
  7320. SeeAlso: AX=B800h,AX=B803h,AH=DFh/DL=00h,AH=DFh/DL=04h
  7321. --------N-21B804-----------------------------
  7322. INT 21 - Novell NetWare - PRINT SERVICES - GET DEFAULT LOCAL PRINTER
  7323.     AX = B804h
  7324. Return: DH = default LPT port (00h-02h)
  7325. Note:    this function is supported by Advanced NetWare 2.1+
  7326. SeeAlso: AX=B800h,AX=B805h,AH=DFh/DL=00h
  7327. --------N-21B805-----------------------------
  7328. INT 21 - Novell NetWare - PRINT SERVICES - SET DEFAULT LOCAL PRINTER
  7329.     AX = B805h
  7330.     DH = new default LPT port (00h-02h)
  7331. Return: AL = status
  7332.         00h successful
  7333. Note:    this function is supported by Advanced NetWare 2.1+
  7334. SeeAlso: AX=B800h,AX=B804h,AH=DFh/DL=00h
  7335. --------N-21B806-----------------------------
  7336. INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT QUEUE
  7337.     AX = B806h
  7338.     DH = LPT port (00h-02h)
  7339.     BX:CX = print queue's object ID
  7340. Return: AL = status
  7341.         00h successful
  7342.         FFh job already set
  7343. Desc:    specify the print queue on which a print job is to be placed the next
  7344.       time a capture is started on the given printer port
  7345. Note:    this function is supported by Advanced NetWare 2.1+
  7346. SeeAlso: AX=B801h,AX=B807h,AH=E0h/SF=09h
  7347. --------N-21B807-----------------------------
  7348. INT 21 - Novell NetWare - PRINT SERVICES - SET CAPTURE PRINT JOB
  7349.     AX = B807h
  7350.     DH = LPT port (00h-02h)
  7351.     BX = job number (see AH=E3h/SF=68h)
  7352.     SI:DI:CX = NetWare file handle (see AH=E3h/SF=68h)
  7353. Return: AL = status
  7354.         00h successful
  7355.         FFh job already queued
  7356. Desc:    specify the capture file and print job to be used for subsequent
  7357.       output to the given printer port
  7358. Note:    this function is supported by Advanced NetWare 2.1+
  7359. SeeAlso: AX=B801h,AX=B806h,AH=E0/SF=09h,AH=E3h/SF=68h
  7360. --------N-21B808-----------------------------
  7361. INT 21 - Novell NetWare - PRINT SERVICES - GET BANNER USER NAME
  7362.     AX = B808h
  7363.     ES:BX -> 12-byte buffer for user name
  7364. Return: AL = status
  7365.         00h successful
  7366. Desc:    get the user name which is printed on the banner page
  7367. Notes:    this function is supported by Advanced NetWare 2.1+
  7368.     the default name is the login name of the user
  7369. SeeAlso: AX=B809h
  7370. --------N-21B809-----------------------------
  7371. INT 21 - Novell NetWare - PRINT SERVICES - SET BANNER USER NAME
  7372.     AX = B809h
  7373.     ES:BX -> 12-byte buffer containing user name
  7374. Return: AL = status
  7375.         00h successful
  7376. Desc:    specify the user name which is printed on the banner page
  7377. Notes:    this function is supported by Advanced NetWare 2.1+
  7378.     the default name is the login name of the user
  7379. SeeAlso: AX=B808h
  7380. --------N-21B9-------------------------------
  7381. INT 21 U - Novell NetWare - "SpecialAttachableFunction"
  7382.     AH = B9h
  7383.     AL = FFh to hook this function
  7384.         ES:BX -> function to invoke on AH=B9h when AL<>FFh
  7385. Note:    this function is no longer used or supported by current versions of
  7386.       NetWare
  7387. --------N-21BA-------------------------------
  7388. INT 21 U - Novell NetWare - "ReturnCommandComPointers"
  7389.     AH = BAh
  7390. Return: DX = environment segment
  7391.     ES:DI -> COMMAND.COM drive
  7392. Desc:    used to edit the COMSPEC and PATH variables in the master environment
  7393.       when mapping network drives
  7394. Note:    this function was documented in older Novell documents which are no
  7395.       longer available
  7396. --------N-21BB-------------------------------
  7397. INT 21 - Novell NetWare - WORKSTATION - SET END OF JOB STATUS
  7398.     AH = BBh
  7399.     AL = new EOJ flag
  7400.         00h disable EOJs
  7401.         01h enable EOJs
  7402. Return: AL = old EOJ flag
  7403. Desc:    specify whether the network shell should automatically generate an
  7404.       End of Job call when the root command processor regains control
  7405. Note:    this function is supported by NetWare 4.0+, Advanced NetWare 1.0+, and
  7406.       Alloy NTNX
  7407. SeeAlso: AH=19h,AH=D6h
  7408. --------v-21BBBB-----------------------------
  7409. INT 21 - VIRUS - "Hey You" - INSTALLATION CHECK
  7410.     AX = BBBBh
  7411. Return: AX = 6969h
  7412. SeeAlso: AH=ABh"VIRUS",AH=BEh"VIRUS"
  7413. --------N-21BC-------------------------------
  7414. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - LOG PHYSICAL RECORD
  7415.     AH = BCh
  7416.     AL = flags (see #0986)
  7417.     BX = file handle
  7418.     CX:DX = starting offset in file
  7419.     SI:DI = length of region to lock
  7420.     BP = timeout in timer ticks (1/18 sec)
  7421.         0000h = don't wait if already locked
  7422. Return: AL = status (see #0985)
  7423. Desc:    add the specified physical record to the log table, optionally locking
  7424.       it
  7425. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7426.       Alloy NTNX
  7427. SeeAlso: AH=5Ch,AH=BDh,AH=BEh,AH=BFh,AH=C2h,AH=D0h
  7428.  
  7429. (Table 0985)
  7430. Values for NetWare status:
  7431.  00h    successful
  7432.  96h    no dynamic memory for file
  7433.  FEh    timed out
  7434.  FFh    failed
  7435.  
  7436. Bitfields for NetWare flags:
  7437. Bit(s)    Description    (Table 0986)
  7438.  0    lock as well as log record
  7439.  1    non-exclusive lock
  7440. --------N-21BD-------------------------------
  7441. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - RELEASE PHYSICAL RECORD
  7442.     AH = BDh
  7443.     BX = file handle
  7444.     CX:DX = starting offset in file
  7445.     SI:DI = length of record
  7446. Return: AL = status
  7447.         00h successful
  7448.         FFh record not locked
  7449. Desc:    unlock the specified physical record but do not remove it from log
  7450.       table
  7451. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7452.       Alloy NTNX
  7453. SeeAlso: AH=BCh,AH=BEh"NetWare",AH=C0h,AH=C3h,AH=D2h
  7454. --------N-21BE-------------------------------
  7455. INT 21 - Novell NetWare - SYNCHRONIZATION SERVICES - CLEAR PHYSICAL RECORD
  7456.     AH = BEh
  7457.     BX = file handle
  7458.     CX:DX = starting offset within file
  7459.     SI:DI = record length in bytes
  7460. Return: AL = status
  7461.         00h successful
  7462.         FFh specified record not locked
  7463. Desc:    unlock the physical record and remove it from the log table
  7464. Note:    this function is supported by NetWare 4.6+, Advanced NetWare 1.0+, and
  7465.       Alloy NTNX
  7466. SeeAlso: AH=5Ch,AH=BCh,AH=BDh,AH=C1h,AH=C4h,AH=D4h
  7467. --------v-21BE-------------------------------
  7468. INT 21 - VIRUS - "Datalock" - INSTALLATION CHECK
  7469.     AH = BEh
  7470. Return: AX = 1234h if resident
  7471. SeeAlso: AX=BBBBh,AX=BE00h
  7472. --------v-21BE00-----------------------------
  7473. INT 21 - VIRUS - "USSR-1049" - INSTALLATION CHECK
  7474.     AX = BE00h
  7475.     CF set
  7476. Return: CF clear if resident
  7477. SeeAlso: AH=BEh"VIRUS",AH=C0h"VIRUS"
  7478. --------N-21BF-------------------------------
  7479. INT 21 O - Novell NetWare, Alloy NTNX - LOG/LOCK RECORD (FCB)
  7480.     AH = BFh
  7481.     AL = flags (see #0986)
  7482.     DS:DX -> opened FCB (see #0574 at AH=0Fh)
  7483.     BX:CX = offset
  7484.     BP = lock timeout in timer ticks (1/18 sec) if AL nonzero
  7485.     SI:DI = length
  7486. Return: AL = error code (see #0985)
  7487. Note:    this function was added in NetWare 4.6, but was removed some time prior
  7488.       to Advanced NetWare 2.15, and is no longer listed in current Novell
  7489.       documentation
  7490. SeeAlso: AH=BCh,AH=C0h"NetWare",AH=C2h"NetWare"
  7491. --------!---Section--------------------------
  7492.